问题描述:
给定一个二叉树,判断它是否是高度平衡的二叉树。
本题中,一棵高度平衡二叉树定义为:
一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过1。
示例 1:
给定二叉树 [3,9,20,null,null,15,7]
3
/ \
9 20
/ \
15 7
返回 true
示例 2:
给定二叉树 [1,2,2,3,3,null,null,4,4]
1
/ \
2 2
/ \
3 3
/ \
4 4
返回 false
分析:
对于这个题递归的思想是需要从最底层的节点开始,我们拿示例2 来说,要判断以1为根节点的树是不是平衡的,那么首先需要以1为根节点的左子树来看,此时2为的新的根节点,此时的树为
2
/ \
3 3
/ \
4 4以此类推,直到根节点为4的时候,在向上回退,相当于告诉以3为根节点的左子树,即就是以4为根节点的树是平衡的(平衡就是左子树高度和右子树高度相差小于等于1),然后再判断以3为根节点的右子树,在判断以4为根节点的树是否是平衡的,将判断后的结果回馈给以3为根节点的树,以此类推,直到回馈到以2为根节点时,开始判断以2为根节点的左子树与右子树的高度差是否小于等于1,如果是,那么就返回true,否则返回false。
class Solution {
int getHight(TreeNode root){
if(root == null){
return 0;
}
int left = getHight(root.left);
int right = getHight(root.right);
return Math.max(left,right) +1;
}
public boolean isBalanced(TreeNode root) {
if(root == null){
return true;
}
if(!isBalanced(root.left)){
return false;
}
if(!isBalanced(root.right)){
return false;
}
int left = getHight(root.left);
int right = getHight(root.right);
if(left - right >= -1 && left - right <= 1){
return true;
}
return false;
}
}