每日一道算法题026 平衡二叉树

382 阅读1分钟

题目

leetCode 第 110 题,平衡二叉树 关联类型:树

给定一个二叉树,判断它是否是高度平衡的二叉树。

本题中,一棵高度平衡二叉树定义为:

一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1 。

 

示例 1:

image

输入:root = [3,9,20,null,null,15,7]
输出:true

示例 2

image


输入:root = [1,2,2,3,3,null,null,4,4]
输出:false

示例 3:

输入:root = []
输出:true

做题时间

class Solution {
    public boolean isBalanced(TreeNode root) {
     
     
 
       
    }
}

以上给出方法输入参数,完成作答。

题目分析

  1. 此题使用自顶向下的递归方式进行判断是否为平衡二叉树
  2. 每到一个根节点就判断左右子树的最大深度差额不超过一,则继续
  3. 否则返回 false

解答分析

本文只分析本人做题思路,仅供参考,了解一种解题思想,其他各种做题思路请上网查阅。

解答成功:
执行耗时:1 ms,击败了99.98% 的Java用户
内存消耗:38.4 MB,击败了78.22% 的Java用户

class Solution {
    public boolean isBalanced(TreeNode root) {
        if (root == null) {//空树是平衡二叉树
            return true;
        } else {
            int leftDep = dep(root.left);//左子树最大深度
            int rightDep = dep(root.right);//右子数最大深度
            if (Math.abs(leftDep - rightDep)<=1) {//左右子树最大深度差值不超过 1
                //从上到下递归调用判断
                return isBalanced(root.left) && isBalanced(root.right);
            } else {
                return false;
            }
        }
    }

    public int dep(TreeNode node) {//方法用来计算当前节点的最大深度
        if (node == null) {
            return 0;
        } else {
            int leftDep = dep(node.left) + 1;
            int rightDep = dep(node.right) + 1;
            return Math.max(leftDep, rightDep);
        }
    }
}