要求:输入一个二叉树的根节点,判断该树是不是平衡二叉树
平衡二叉树:任意一节点左右子树的高度之差的绝对值小于2
bool isAVL(BinaryTreeNode *pRoot, int &height)
{
if (pRoot == NULL)
{
height = 0;
return true;
}
// 判断左子树是否是平衡树
int heightLeft;
bool resultLeft = isAVL(pRoot->lchild, heightLeft);
// 判断右子树是否是平衡树
int heightRight;
bool resultRight = isAVL(pRoot->rchild, heightRight);
// 左右子树都为AVL,判断根节点的平衡性
if (resultLeft && resultRight &&abs(heightLeft - heightRight) < 2)
{
height = (heightLeft > heightRight) ? (heightLeft + 1) : (heightRight + 1);
return true;
}
return false;
}
PS:二叉树的深度
int TreeDepth(BinaryTreeNode *pRoot)
{
if (pRoot == NULL)
{
return 0;
}
int nLeft = TreeDepth(pRoot->lchild);
int nRight = TreeDepth(pRoot->rchild);
return (nLeft > nRight) ? (nLeft + 1) : (nRight + 1);
}
本文介绍了一种判断二叉树是否为平衡二叉树的算法,并提供了详细的实现步骤及核心代码。平衡二叉树是一种特殊的二叉树,其每个节点的左右子树高度差不超过1,对于理解数据结构与算法设计原理具有重要意义。
4709





