判断它是否是高度平衡的二叉树。

给定一个二叉树,判断它是否是高度平衡的二叉树。
力扣地址
本题中,一棵高度平衡二叉树定义为:
一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1 。

左神的方法

class Solution {
    public boolean isBalanced(TreeNode root) {
        return process(root).isBalanced;
    }


    //以某个节点为根的时候,1)整棵树是否平衡,2)整棵树的高度是多少
    public static class Info{
        public boolean isBalanced;
        public int height;
        public Info(boolean isBalanced,int height){
            this.isBalanced = isBalanced;
            this.height = height;
        }
    }
	//每棵树都返回两个信息
    public static Info process(TreeNode root){
        //空树是平衡的
        if(root == null){
            return new Info(true,0);
        }

        //左子树整体是否平衡,左子树的高度
        Info left = process(root.left);
        //右子树整体是否平衡,右子树的高度
        Info right = process(root.right);
        //整棵树的高度是左右子树中较高的那个加上1
        int height = Math.max(left.height,right.height) + 1;
        //整棵树是不是平衡的:左子树平衡&&右子树平衡&&左右子树高度相差不超过1;
        boolean isBalanced = left.isBalanced && right.isBalanced &&Math.abs(left.height - right.height) < 2;
        return  new Info(isBalanced,height);
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值