CC18:二叉树平衡检查

题目

实现一个函数,检查二叉树是否平衡,平衡的定义如下,对于树中的任意一个结点,其两颗子树的高度差不超过1。
给定指向树根结点的指针TreeNode* root,请返回一个bool,代表这棵树是否平衡。

解法

这道题其实就是判断平衡二叉树,我们可以从root开始递归检查每个子树的高度,如果子树是平衡的,那么就返回子树的高度,否则返回-1:递归结束,树是不平衡的。这也是最常用的解法。
代码如下:

/*
struct TreeNode {
    int val;
    struct TreeNode *left;
    struct TreeNode *right;
    TreeNode(int x) :
            val(x), left(NULL), right(NULL) {
    }
};*/

class Balance {
public:
    int CheckHeight(TreeNode* node)
    {
        if(node==nullptr)
            return 0;
        
        int LeftHeight=CheckHeight(node->left);
        if(LeftHeight==-1)
            return -1;
        
        int RightHeight=CheckHeight(node->right);
        if(RightHeight==-1)
            return -1;
        
        if(abs(LeftHeight-RightHeight)>1)
            return -1;
        else{
            return max(LeftHeight,RightHeight)+1;
        }
    }
    
    bool isBalance(TreeNode* root) {
        // write code here
        return (CheckHeight(root)==-1)?false:true;
    }
};
posted @ 2018-07-23 10:16  MrYun  阅读(124)  评论(0编辑  收藏  举报