二叉树练习(六)— 判断是否是平衡二叉树

什么是平衡二叉树
一个树中,每一棵子树的左树高度减右树高度的高度差不超过1,那整棵树就为平衡树。

分析:

  1. 如果一棵树的的头节点为X,那么X的左子树整体是一颗平衡树,右子树整体也是一颗平衡树,并且相减的高度差不超过1,那么X就是一颗平衡树。
  2. 所以,递归遍历左子树和右子树,获取每一棵树的高度,并判断是否是平衡二叉树。

代码实现:

public static class Info {
        public boolean isBalance;
        public int height;

        public Info(boolean isBalance, int height) {
            this.isBalance = isBalance;
            this.height = height;
        }
    }

    public static boolean isBalance(TreeNode root) {
        return process(root).isBalance;
    }

    public static Info process(TreeNode root) {
        if (root == null) {
            return new Info(true, 0);
        }

        Info leftInfo = process(root.left);
        Info rightInfo = process(root.right);

        int height = Math.max(leftInfo.height, rightInfo.height) + 1;
        boolean isBalance = leftInfo.isBalance && rightInfo.isBalance
                            && Math.abs(leftInfo.height - rightInfo.height) < 2;

        return new Info(isBalance, height);
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值