BM36. [判断是不是平衡二叉树]

alt

https://www.nowcoder.com/exam/oj?tab=%E7%AE%97%E6%B3%95%E7%AF%87&topicId=295

BM36. 判断是不是平衡二叉树

题目分析

这个题目就更容易了,什么叫平衡二叉树,它是一棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。这不就是一个双子树问题吗?另外求子树高度也是一个后序遍历问题。这不是一个双子树问题嵌套后序遍历。

具体做法

alt

双子树的模板都是

public xxx  handler(TreeNode root){
  xxx isA = handler(root.left) 
  xxx isB = handler(root.right);
  return isA && isB;
}

二叉树的最大深度

 private int maxDepth(TreeNode root) {
        if (root == null)
            return 0;
        int l= maxDepth(root.left);
        int r=maxDepth(root.right);
        // 后序遍历来了
        int max = Math.max(l, r) + 1;
      return max;
    }

套用这两个模板直接解题

public boolean IsBalanced_Solution(TreeNode root) {
      if(root == null)
          return true;
      int l = maxDepth(root.left);
      int r = maxDepth(root.right);
      //先拿到两个高度 拿到退出条件
      if(Math.abs(l - r) > 1)
          return false;
       boolean isA = IsBalanced_Solution(root.left) 
       boolean isB = IsBalanced_Solution(root.right);
       return isA && isB;
    }

    public int maxDepth(TreeNode root){
        if(root == null)
            return 0;
        int l =  maxDepth(root.left);
        int r = maxDepth(root.right);
        return Math.max(l,r) + 1;
    }

复杂度分析:

  • 时间复杂度:,其中为树的节点数,两个递归最深都为
  • 空间复杂度:,递归栈最大深度

tpId=295&sfm=github&channel=nowcoder

#面经##题解##面试题目#
全部评论

相关推荐

点赞 评论 收藏
分享
点赞 1 评论
分享
牛客网
牛客企业服务