力扣110平衡二叉树

自顶向下递归

实际就是从根节点的左右节点一层一层检查每一个左右节点的高度差不是小于等于一,check的作用就是检查当前节点的左孩子节点与右孩子节点的高度差是不是小于等于一,check1的作用是检查当前节点的左孩子节点与右孩子节点各自的左右孩子节点高度差是不是小于等于一,如此递归。

class Solution {
    public boolean isBalanced(TreeNode root) {
     if(root==null){
         return true;
     }
     else{
         boolean check=Math.abs(height(root.left)-height(root.right))<=1;
         boolean check1=isBalanced(root.right)&&isBalanced(root.left);
         return check&&check1;
     }
    }
    public int height(TreeNode root){
    if(root==null){
        return 0;
    }
    return Math.max(height(root.left),height(root.right))+1;
    }
}

从下到上递归

deep函数返回的类型是int,他要返回的是各个节点的高度。如果存在某个节点的左孩子节点与右孩子节点的高度差大于一就返回-1,代表这棵树不是平衡二叉树。

代码乍一看好像还是从顶递归到底,其实分析一下还是从最底下往上面判断的,因为递归是优先深度的,递归要递归到最底层然后才返回原来的位置继续执行,if语句的三个条件left==-1、right==-1、Math.abs(right-left)>1中,Math.abs(right-left)>1就是用来判断最底层的条件,right=-1,left=-1都是基于存在Math.abs(right-left)>1这个情况上的。

class Solution {
    public boolean isBalanced(TreeNode root) {
     if(root==null){
         return true;
     }
    return deep(root)!=-1;
    }
    public int deep(TreeNode root){
    if(root==null){
        return 0;
    }
    int left=deep(root.left);
    int right=deep(root.right);
    if(left==-1||right==-1||Math.abs(right-left)>1){
        return -1;
    }
    return Math.max(left,right)+1;
    }
}

  • 8
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值