力扣110(平衡二叉树)
给定一个二叉树,判断它是否是高度平衡的二叉树。
本题中,一棵高度平衡二叉树定义为:
一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1 。
解题思路
- 涉及树高度的求解,所以先掌握树的高度如何求解,请参照我另一篇文章
- 每次递归需要干的事:因为每次递归给的都是一棵树的根的节点,所以确定以这个节点作为根的树,其左右子树是否满足平衡,满足就是符合题意的。核心思想是:以根->左->右为序依次将不为null的节点作为根,去判断此时树的左右子树是否满足平衡即可。
- 遍历至叶子,整棵树检查完毕,即此树是满足平衡的。
class Solution {
//一棵树的深度计算
private int height(TreeNode root){
if(root==null) return 0;
return Math.max(height(root.left),height(root.right))+1;
}
public boolean isBalanced(TreeNode root) {
if(root==null){
return true;//叶子的左右树的高度肯定是平衡的(因为都是0),这也是遍历到叶子结束
}
//能走到这说明root!=null
if((height(root.left)-height(root.right))>1){
return false;
}
if((height(root.right)-height(root.left))>1){
return false;
}
return isBalanced(root.left)&&isBalanced(root.right);
}
}