目录
平衡二叉树
描述
给定一个二叉树,判断它是否是高度平衡的二叉树。
本题中,一棵高度平衡二叉树定义为:
一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 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
提示
- 树中的节点数在范围 [0, 5000] 内
方法:递归
本题我们可以从底向上求,先递归到叶子节点,计算包含叶子结点的子树是否平衡,如果不平衡则返回-1,如果平衡则返回当前子树的深度,对每个节点进行左右子树深度差不大于1的判断,只要不平衡就返回-1,最后到根节点只用判断根节点的深度是否为-1就知道是否平衡了。
class Solution {
public boolean isBalanced(TreeNode root) {
return calDepth(root)!=-1;
}
public int calDepth(TreeNode root){
if (root==null) return 0;
int leftDepth=calDepth(root.left);//递归计算左子树深度
int rightDepth=calDepth(root.right);//递归计算右子树深度
if (leftDepth==-1||rightDepth==-1||Math.abs(leftDepth-rightDepth)>1) return -1;//如果当前子树不平衡,那么直接返回-1
else return Math.max(leftDepth,rightDepth)+1;//如果是平衡的返回当前子树的深度
}
}