1. 程式人生 > >判斷一個二叉樹是否是平衡二叉樹(AVL)

判斷一個二叉樹是否是平衡二叉樹(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);
}