要求:输入一个二叉树的根节点,判断该树是不是平衡二叉树
平衡二叉树:任意一节点左右子树的高度之差的绝对值小于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);
}