题解 | #判断是不是平衡二叉树#

判断是不是平衡二叉树

https://www.nowcoder.com/practice/8b3b95850edb4115918ecebdf1b4d222

平衡二叉树的定义:左右子树高度差的绝对值 <= 1,且左右子树都是平衡二叉树

显然,具有递归特性,考虑使用递归。

此时,需要计算左右子树的高度差,以及左右子树各自是否是平衡二叉树,显然一个是int,一个是boolean

需要确定递归过程或者说递归返回值,是递归深度int,还是递归是否是平衡二叉树boolean,由于是否是平衡二叉树是结果,判断过程依赖于深度,且递归boolean不便于确定递归终止条件,所以主要递归深度。

考虑将深度int转化为是否为平衡二叉树的boolean,可以 设非平衡二叉树的深度返回值为-1,平衡二叉树返回非-1的具体深度值

public class Solution {
    public boolean IsBalanced_Solution(TreeNode root) {

        if (root == null) {
            return true;
        }
        return depthDiff(root) == -1 ? false : true;
    }

    public int depthDiff(TreeNode root) {
        if (root == null) {
            return 0;
        }

        int left = depthDiff(root.left);
        int right = depthDiff(root.right);
        // 如果有一方等于-1,直接返回-1,因为左右子树已经有一方不是平衡二叉树了
        if (left == -1 || right == -1) {
            return -1;
        }
        // > 1,说明已经不是平衡二叉树了
        if (Math.abs(left - right) > 1) {
            return -1;
        } else {
            // 如果是平衡二叉树,返回较大深度
            return Math.max(left, right) + 1;
        }
    }
}

全部评论

相关推荐

不愿透露姓名的神秘牛友
07-10 14:00
林子大了什么鸟都有啊,我觉得我说的已经很客气了,阴阳谁呢
牛客62656195...:应该不是阴阳吧?你第一次注册的时候boss就说你是牛人
点赞 评论 收藏
分享
程序员小白条:找的太晚,别人都是大三实习,然后大四秋招春招的,你大四下了才去实习,晚1年
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
07-08 12:05
俺不中了,BOSS遇到了一个hr,我觉得我咨询的问题都很正常吧,然后直接就被拒绝了???
恶龙战士:你问的太多了,要不就整理成一段话直接问他,一个一个问不太好
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务