判断一个二叉树是否是平衡二叉树(AVL)

要求:输入一个二叉树的根节点,判断该树是不是平衡二叉树

平衡二叉树:任意一节点左右子树的高度之差的绝对值小于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);
}

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