判断二叉树是否是平衡树

这道题一开始我有点迷,有点搞不清平衡树的意思,虽然查了百度百科,但还是觉得不是十分的透彻,这让我耽误了许多时间。

后来在看了一些博客后,我突然醒悟,什么是平衡二叉树?

就是头结点的两个子树是平衡二叉树,且两个子树高度不超过 1。这句话就是一个递归。

定义平衡二叉树已经确定可以用递归来处理,那么高度怎么求呢?

平衡二叉树的高度等于什么呢?

等于其最高的一侧子树的高度加上头结点那一层。

Problem solved.

int depth(TreeNode *root){
    if (root == nullptr){
        return 0;
    }
    
    auto leftSubTreeDepth  = depth(root->left);
    auto rightSubTreeDepth = depth(root->right);
    
    return max(leftSubTreeDepth, rightSubTreeDepth) + 1;
}

bool isBalanced(TreeNode* root) {
    if(root == nullptr){
        return true;
    }
    
    return (isBalanced(root->left) && isBalanced(root->right)
            && (abs(depth(root->left) - depth(root->right)) < 2));
}

 

posted @ 2015-07-27 00:58  wu_overflow  阅读(210)  评论(0编辑  收藏  举报