- 平衡二叉树
给定一个二叉树,判断它是否是高度平衡的二叉树。
本题中,一棵高度平衡二叉树定义为:
一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过1。
1.错误尝试
class Solution {
public boolean isBalanced(TreeNode root) {
if(root == null) return true;
return Math.abs(getDepth(root.left) - getDepth(root.right)) <= 1;
}
int getDepth(TreeNode root){
if(root == null ) return 0;
return Math.max(getDepth(root.left), getDepth(root.right)) + 1;
}
}
输入:
[1,2,2,3,null,null,3,4,null,null,4]
输出
true
预期结果
false
也就是你只是判断了根节点是否平衡
进行修改
class Solution {
public boolean isBalanced(TreeNode root) {
if(root == null) return true;
return (Math.abs(getDepth(root.left) - getDepth(root.right)) <= 1) &&
isBalanced(root.right) && isBalanced(root.left);
}
int getDepth(TreeNode root){
if(root == null ) return 0;
return Math.max(getDepth(root.left), getDepth(root.right)) + 1;
}
}
2.由底向上,及时剪枝
class Solution {
public boolean isBalanced(TreeNode root) {
if(root == null) return true;
return getDepth(root) != -1;
}
int getDepth(TreeNode root){
//及时剪枝,从底向上
if(root == null) return 0;//边界返回高度0,
int n1 = getDepth(root.left);
if(n1 == -1 ) return -1;
int n2 = getDepth(root.right);
if(n2 == -1) return -1;
if(Math.abs(n1 - n2) > 1) return -1;
return Math.max(n1, n2) + 1;//在求高度的时候就开始判断是否平衡了
}
}