(Java算法)剑指offer-面试题55 - II. 平衡二叉树

输入一棵二叉树的根节点,判断该树是不是平衡二叉树。如果某二叉树中任意节点的左右子树的深度相差不超过1,那么它就是一棵平衡二叉树。

示例 1:

给定二叉树 [3,9,20,null,null,15,7]
在这里插入图片描述

返回 true 。

示例 2:

给定二叉树 [1,2,2,3,3,null,null,4,4]
在这里插入图片描述

返回 false 。

题目解释: 首先我们要明确平衡树的概念,并非是根到叶子节点的路径长度总和相差不超过1才叫做平衡树,而是要求每一个节点左右子树的长度都不超过1。

解题思路: 本题可以采用遍历每一个node左右子树,然后对比长度,但是这样耗时会很大,所以我们采用从下往上计算长度的方法,一旦绝对值超过1,直接返回false。

解题步骤: 我们还是可以用正常递归的方法,比如前序遍历,先将递归出口定义好,当我们找到叶子节点的时候,就递归出来,然后开始从下往上计算路径长度。

public boolean isBalanced(TreeNode root) {
        return explain(root)!=-1;
    }
    public int explain(TreeNode root){
        if(root == null) return 0;
        int left = explain(root.left);
        if(left == -1){
            return -1;
        }
        int right = explain(root.right);
        if(right==-1){
            return -1;
        }
        return Math.abs(left-right)<2?Math.max(left,right)+1:-1;
    }
发布了313 篇原创文章 · 获赞 58 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/qq_41936805/article/details/104715463