平衡二叉树的判断条件
任何节点的子树的高度差都小于等于1
采用的分而治之的方法
public static class ReturnType {
private boolean isBalance;
private int height;
public ReturnType(boolean isBalance, int height) {
this.isBalance = isBalance;
this.height = height;
}
}
private static ReturnType process(Node x) {
//为空不影响
if (x == null) {
return new ReturnType(true, 0);
}
//返回左树上的信息
ReturnType leftData = process(x.left);
//返回右数上的信息
ReturnType rightData = process(x.right);
//左树和右树哪一个更高再加一
int height = Math.max(leftData.height, rightData.height) + 1;
//左树和右树是否为平衡二叉树,高度差是否小于等于1
boolean isBalanced = leftData.isBalanced && rightData.isBalanced
&& Math.abs(leftData.height - rightData.height) < 2;
return new ReturnType(isBalanced, height);
}
public static boolean isBalance(Node head){
return process(head).isBalance;
}