您的位置:首页 > 其它

-判断一棵二叉树是否是平衡二叉树/求一颗二叉树的镜像

2017-07-27 20:51 417 查看

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

任意给定一棵二叉树,判断它是否是平衡二叉树。所谓平衡二叉树,是指二叉树中任意一个结点的左右子树的高度之差不超过1

可以分两步实现。第一步先实现求解 二叉树中每个结点的高度的函数height(BinaryNode );然后先序遍历二叉树中的每一个结点node,调用height()求出该结点的左子树高度height(node.left) 和 右子树高度 height(node.right)。根据左右子树的高度判断是否为平衡二叉树。

int  HeightOfBinatyTree(BinaryTreeNode* pRoot) //求二叉树的高度
{
if (pRoot == NULL)
return 0;
int m = HeightOfBinatyTree(pRoot->_pLeft);
int n = HeightOfBinatyTree(pRoot->_pRight);
return (m>n)? (m+1):(n+1);
}

bool IsBalanceTree(BinaryTreeNode* pRoot) //判断二叉树是否是平衡二叉树
{
if (!pRoot)
return true;
int left_height = HeightOfBinatyTree(pRoot->_pLeft);
int right_height = HeightOfBinatyTree(pRoot->_pRight);
if(abs(left_height - right_height) > 1)
return false;
else
return IsBalanceTree(pRoot->_pLeft) && IsBalanceTree(pRoot->_pRight);
}


求二叉树的镜像

void MirrorTree(BinaryTreeNode* pRoot)
{
if(pRoot == NULL)
return ;
if(pRoot->_pLeft == NULL && pRoot->_pRight == NULL) //该结点是叶子结点
return ;

BinaryTreeNode *pTemp = pRoot->_pLeft; //交换左右孩子
pRoot->_pLeft = pRoot->_pRight;
pRoot->_pRight = pTemp;

if (pRoot->_pLeft)
MirrorTree(pRoot->_pLeft);
if (pRoot->_pRight)
MirrorTree(pRoot->_pRight);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  二叉树 镜像 平衡
相关文章推荐