二叉树镜像(递归和非递归)+ 判断一棵二叉树是否是平衡二叉树+ 判断一棵树是否为完全二叉树
2017-07-26 00:46
459 查看
二叉树镜像(递归和非递归):
判断一棵二叉树是否是平衡二叉树:
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(f
4000
lag == true)
return false;
}
if(pCur->_pLeft)
q.push(pCur->_pLeft);
if(pCur->_pRight)
q.push(pCur->_pRight);
}
return true;
}
// 求二叉树的镜像:非递归 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(f
4000
lag == true)
return false;
}
if(pCur->_pLeft)
q.push(pCur->_pLeft);
if(pCur->_pRight)
q.push(pCur->_pRight);
}
return true;
}
相关文章推荐
- 二叉树经典面试题4~判断一棵树是否是完全二叉树
- 判断一棵二叉树是否是平衡二叉树并求一颗二叉树的镜像——题集十
- 二叉树--判断一棵二叉树是否是平衡二叉树&&求一颗二叉树的镜像
- 判断一棵二叉树是否是平衡二叉树/求一颗二叉树的镜像
- 二叉树问题---判断一棵树是否为完全二叉树
- leetcode_101. Symmetric Tree 对称树, 判断一棵二叉树是否对称,递归方法
- 判断一棵二叉树是否为完全二叉树
- 判断一棵二叉树是否是完全二叉树
- 刷题之二叉树----判断一棵树是否为完全二叉树
- 二叉树采用二叉链表存储,设计算法判断给定的二叉树是否是一棵完全二叉树,采用先进先出的队列。
- 8-32 判断一棵二叉树是否是完全二叉树
- 判断一棵二叉树是否为完全二叉树
- 二叉树经典面试题4~判断一棵树是否是完全二叉树
- 判断一棵二叉树的镜像是否为其自己
- 每日一题——判断二叉树是否平衡,求一棵二叉树的镜像
- 如何判断一棵二叉树是否是完全二叉树
- 判断一棵二叉树是否是平衡二叉树/求一颗二叉树的镜像
- 判断一棵二叉树是否是平衡二叉树/求一颗二叉树的镜像
- 二叉树--判断一棵树是否是完全二叉树
- 以二叉链表的方式创建一棵二叉树,并以非递归算法中序输出;计算二叉树的繁茂度,并判断二叉树是否为完全二叉树