解题思路:
递归
创建一个类用于保存子树是否平衡以及子树的高度。如果子树不平衡直接返回false。如果子树平衡对比左右子树的高度再返回结果。
提交代码:
class BandN{
boolean B;
int N;
BandN(boolean B,int N){
this.B=B;
this.N=N;
}
}
class Solution {
public boolean isBalanced(TreeNode root) {
if(root==null) return true;
BandN left=balanceTree(root.left);
if(!left.B) return false;
BandN right=balanceTree(root.right);
if(!right.B) return false;
return Math.abs(left.N-right.N)<2?true:false;
}
private BandN balanceTree(TreeNode root) {
BandN result=new BandN(true,0);
if(root==null) {
return result;
}
BandN left=balanceTree(root.left);
if(!left.B) {
result.B=false;
return result;
}
BandN right=balanceTree(root.right);
if(!right.B) {
result.B=false;
return result;
}
if(Math.abs(left.N-right.N)<2) {
result.N=Math.max(left.N, right.N)+1;
return result;
}
else {
result.B=false;
return result;
}
}
}
运行结果: