题解 | #判断是不是平衡二叉树#

判断是不是平衡二叉树

https://www.nowcoder.com/practice/8b3b95850edb4115918ecebdf1b4d222

跟上一题有点类似,如果用两层递归,时间复杂度太大。看了题解才发现可以边递归计算左右子树深度边判断是否平衡。可能平时不怎么用c++,竟然忘了引用这个功能。惭愧惭愧。。。

class Solution {
  public:
    bool judge(TreeNode* r, int& depth) {
        if (!r) return true;
        int left = 0, right = 0;//左右子树的深度
        if (!judge(r->left, left) ||
                !judge(r->right, right))return
                        false; //第一种情况,子树中就有非平衡的部分
        if (left - right > 1 ||
                right - left > 1) return
                        false; //第二种情况,子树都是平衡的,但本身不平衡

        depth = (left > right) ? left + 1 : right + 1;
        return true;
    }

    bool IsBalanced_Solution(TreeNode* pRoot) {
        // write code here
        int depth = 0;
        return judge(pRoot, depth);
    }
};

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务