二叉树镜像(递归和非递归)+ 判断一棵二叉树是否是平衡二叉树+ 判断一棵树是否为完全二叉树

二叉树镜像(递归和非递归):

// 求二叉树的镜像:非递归
	void GetBinaryMirror_Nor()
	{
		if(_pRoot == NULL)
			return;
		stack<Node*> s;
		s.push(_pRoot);
		while(!s.empty())
		{
			Node* pCur = NULL;
			pCur = s.top();
			s.pop();
			if(pCur->_pLeft || pCur->_pRight)
				swap(pCur->_pLeft,pCur->_pRight);
			if(pCur->_pRight)
				s.push(pCur->_pRight);
			if(pCur->_pLeft)
				s.push(pCur->_pLeft);
		}
	}

        // 求二叉树的镜像:递归版本
	void GetBinaryMirror()
	{
		_GetBinaryMirror(_pRoot);
	}
        void _GetBinaryMirror(Node* &pRoot)
	{
		if(pRoot == NULL)
			return;
		if(pRoot->_pLeft == NULL && pRoot->_pRight == NULL)
			return;
		swap(pRoot->_pLeft,pRoot->_pRight);
		_GetBinaryMirror(pRoot->_pLeft);
		_GetBinaryMirror(pRoot->_pRight);
	}

判断一棵二叉树是否是平衡二叉树:

bool IsBalanceBinaryTree()
	{
		return _IsBalanceBinaryTree(_pRoot);
	}
bool _IsBalanceBinaryTree(Node* pRoot)
	{
		if(pRoot == NULL)
			return true;
		if(pRoot->_pLeft == NULL && pRoot->_pRight == NULL)
			return true;
		size_t L = _Height(pRoot->_pLeft);
		size_t R = _Height(pRoot->_pRight);
		int b = R-L;
		if(b > 1 || b < -1)
			return false;
		else
			return _IsBalanceBinaryTree(pRoot->_pLeft)&&_IsBalanceBinaryTree(pRoot->_pRight);
	}

 判断一棵树是否为完全二叉树:

// 利用层序遍历来处理--> 关键:找第一个度不为2的结点-->后续结点
	// 如果有孩子则不是完全二叉树
	// 否则:是
	bool IsCompleteBinaryTree()
	{
		if(_pRoot == NULL)
			return false;
		queue<Node*> q;
		q.push(_pRoot);
		bool flag = false;
		while(!q.empty())
		{
			Node* pCur = NULL;
			pCur = q.front();
			q.pop();
			if(!pCur->_pLeft && pCur->_pRight)   //只有右孩子
				return false;
			else if(pCur->_pLeft && !pCur->_pRight)   //只有左孩子
			{
				if(flag == true)
					return false;
				flag = true;
			}
			else if(!pCur->_pLeft && !pCur->_pRight)    //没有孩子
			{
				flag = true;
			}
			else
			{
				if(flag == true)
					return false;
			}
			if(pCur->_pLeft)
				q.push(pCur->_pLeft);
			if(pCur->_pRight)
				q.push(pCur->_pRight);
		}
		return true;
	}

    原文作者:平衡二叉树
    原文地址: https://blog.csdn.net/SUXIAONI_/article/details/76100646
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞