题目
leetCode 第 110 题,平衡二叉树 关联类型:树
给定一个二叉树,判断它是否是高度平衡的二叉树。
本题中,一棵高度平衡二叉树定义为:
一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1 。
示例 1:
输入:root = [3,9,20,null,null,15,7]
输出:true
示例 2:
输入:root = [1,2,2,3,3,null,null,4,4]
输出:false
示例 3:
输入:root = []
输出:true
做题时间
class Solution {
public boolean isBalanced(TreeNode root) {
}
}
以上给出方法输入参数,完成作答。
题目分析
- 此题使用自顶向下的递归方式进行判断是否为平衡二叉树
- 每到一个根节点就判断左右子树的最大深度差额不超过一,则继续
- 否则返回 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);
}
}
}