数据结构------二叉树------平衡二叉树

判断一颗二叉树是否为平衡二叉树

平衡二叉树概念:

平衡二叉搜索树(Self-balancing binary search tree)又被称为AVL树(有别于AVL算法),且具有以下性质:它是一 棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。平衡二叉树的常用实现方法有红黑树、AVL、替罪羊树、Treap、伸展树等。 最小二叉平衡树的节点的公式如下 F(n)=F(n-1)+F(n-2)+1 这个类似于一个递归的数列,可以参考Fibonacci(斐波那契)数列,1是根节点,F(n-1)是左子树的节点数量,F(n-2)是右子树的节点数量。

数据结构------二叉树------平衡二叉树_第1张图片

以下是我在oj环境下的c++下编写的代码,后续会用c补上整个代码,包括测试结果!如有问题,可以留言,谢谢!

class Solution {
public:
    bool IsBalanced_Solution(TreeNode* pRoot) {
int depth=0;
        return IsBalanced(pRoot,&depth);
    }
    bool IsBalanced(TreeNode* pRoot,int *pDepth)
    {
        //true表示平衡
        //false表示不平衡
        if(pRoot==NULL)
        {
            *pDepth=0;
            return true;
        }
        int left,right;
        if(IsBalanced(pRoot->left,&left)&&IsBalanced(pRoot->right,&right))//用递归求高度
        {
            if(left-right>=-1&&left-right<=1)//任意节点左右子树高度不能超过1
            {
                *pDepth=1+(left>right?left:right);//求得二叉树高度
                return true;
            }
        }
        return false;
    }
};

 

你可能感兴趣的:(数据结构)