Leetcode110平衡二叉树

这个题,用到一个套路就是树形BP,这个套路进阶才讲。重点时列出所有的可能性,记住递归遍历二叉树无论怎么遍历,都是访问每一个节点三次,所以可以统计信息返回。当然自己用栈实现的遍历二叉树不一定时三次

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode(int x) { val = x; }
 * }
 */
class Solution {
    public boolean isBalanced(TreeNode root) {
        //baseline
      return isBalance(root).flag;
    }
    //其实就是左右子树返回信息,根节点获得信息,如果已经满足莫条件后续的就不用返回信息了
    public static tree isBalance(TreeNode root){
        if(root==null){
            return new tree(true,0);
        }
        tree left=isBalance(root.left);
        if(!left.flag){
            return new tree(false,0);
        }
        tree right=isBalance(root.right);
        if(!right.flag){
            return new tree(false,0);
        }
        if(Math.abs(left.h-right.h)>1){
            return new tree(false,0);
        }
        return new tree(true,Math.max(left.h,right.h)+1);
    }
   
}
//定义的一个返回信息的类型,左右子树都会返回信息且 信息类型一样
 public class tree{
        boolean flag;
        int h;
        public tree(boolean flag,int h){
            this.flag=flag;
            this.h=h;
        }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值