给定一个二叉树,判断它是否是高度平衡的二叉树。
力扣地址
本题中,一棵高度平衡二叉树定义为:
一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1 。
左神的方法
class Solution {
public boolean isBalanced(TreeNode root) {
return process(root).isBalanced;
}
//以某个节点为根的时候,1)整棵树是否平衡,2)整棵树的高度是多少
public static class Info{
public boolean isBalanced;
public int height;
public Info(boolean isBalanced,int height){
this.isBalanced = isBalanced;
this.height = height;
}
}
//每棵树都返回两个信息
public static Info process(TreeNode root){
//空树是平衡的
if(root == null){
return new Info(true,0);
}
//左子树整体是否平衡,左子树的高度
Info left = process(root.left);
//右子树整体是否平衡,右子树的高度
Info right = process(root.right);
//整棵树的高度是左右子树中较高的那个加上1
int height = Math.max(left.height,right.height) + 1;
//整棵树是不是平衡的:左子树平衡&&右子树平衡&&左右子树高度相差不超过1;
boolean isBalanced = left.isBalanced && right.isBalanced &&Math.abs(left.height - right.height) < 2;
return new Info(isBalanced,height);
}
}