剑指Offer_39_平衡二叉树

题目描述

输入一棵二叉树,判断该二叉树是否是平衡二叉树。

解题思路

递归判断子树是否是平衡二叉树,每次还需要返回子树的高度用以判断当前树是否是平衡的。

实现

public class Solution {
    private class Result{
        boolean isBalanced = false;
        int depth = 0;

        public Result(boolean isBalanced, int depth){
            this.isBalanced = isBalanced;
            this.depth = depth;
        }
    }

    public boolean IsBalanced_Solution(TreeNode root) {
        Result result = isBalanced(root);
        return result.isBalanced;
    }

    private Result isBalanced(TreeNode root) {
        if (root == null) return new Result(true, 0);
        Result left = isBalanced(root.left);
        Result right = isBalanced(root.right);

        int depth = left.depth > right.depth ? left.depth + 1 : right.depth + 1;

        if (!left.isBalanced || !right.isBalanced){
            return new Result(false,depth);
        }

        if (left.depth - right.depth > 1 || right.depth - left.depth > 1){
            return new Result(false,depth);
        }else {
            return new Result(true,depth);
        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值