思路:
将树的高度和是否是平衡二叉树封装到一个info里面,左右子树递归得到info就知道了子树的高度和该子树是否递归,整合左右子树再判断整个子树是否满足平衡二叉树的要求
核心代码:
public class Solution {
public class Info{
boolean isBalanced;
int height;
public Info(boolean isBalanced,int height){
this.isBalanced=isBalanced;
this.height=height;
}
}
public boolean IsBalanced_Solution(TreeNode root) {
if(root==null) return true;
Info info=IsBalance(root);
return info.isBalanced;
}
public Info IsBalance(TreeNode root){
if(root==null) return new Info(true,0);
Info leftInfo=IsBalance(root.left);
Info rightInfo=IsBalance(root.right);
//获取整棵树的高度
int height=Math.max(leftInfo.height,rightInfo.height)+1;
//获得左右子树的高度差
int height_abs=Math.abs(leftInfo.height-rightInfo.height);
if(height_abs<2 && leftInfo.isBalanced && rightInfo.isBalanced){
return new Info(true,height);
}
return new Info(false,height);
}
}