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

判断是不是平衡二叉树

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;
    }
};

全部评论

相关推荐

11-26 22:34
已编辑
重庆邮电大学 Java
快手 客户端开发 (n+5)k*16 公积金12
牛客895077908号:佬 什么双非硕啊
点赞 评论 收藏
分享
Hello_WordN:咱就是说,除了生命其他都是小事,希望面试官平安,希望各位平时也多注意安全
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务