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

来源:互联网 发布:阿里云服务器防攻击 编辑:程序博客网 时间:2024/06/07 20:07

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

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


0 0
原创粉丝点击