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

判断是不是平衡二叉树

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

递归思路:

  • 空树一定为平衡二叉树
  • 一棵树是平衡二叉树,首先需要它的左右子树都是平衡二叉树,这点可以用返回值bool来递归解决
  • 一棵树是平衡二叉树,其次需要它自己左右子树的高度差不超过1,这点不能用bool来解决,所以考虑将返回值改成pair<bool, int>,bool存储是否为平衡二叉树,而int存储该二叉树的高度。
  • 按照上面两个条件由左右子树的返回值计算该树的返回值。
class Solution {
public:
    pair<bool, int> IsBalanced_Solution2(TreeNode* pRoot) {
        if (!pRoot) return make_pair(true, 0);
        auto l = IsBalanced_Solution2(pRoot->left), r = IsBalanced_Solution2(pRoot->right);
        return make_pair(l.first && r.first && abs(l.second - r.second) <= 1, max(l.second, r.second) + 1);
    }
    bool IsBalanced_Solution(TreeNode* pRoot) {
        return IsBalanced_Solution2(pRoot).first;
    }
};

全部评论

相关推荐

09-08 17:17
同济大学 Java
狗不理fe:里面的人劝一句,别来虾,我们部门24校招生淘汰率30%,还有一些人说有一年保护期,不可能!!!
我的秋招日记
点赞 评论 收藏
分享
09-13 08:41
服装/纺织设计
那一天的Java_J...:你第一次参加面试吗
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
正在热议
更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务