平衡二叉树定义:
空树可以作为平衡二叉树,或
任意一个节点左右子树高度差不能超过1
public class IsBalance {
//1、如果根节点为空节点:为平衡二叉树
//2、判断左子树是否为平衡二叉树,并且返回左子树高度
//3、判断右子树是否为平衡二叉树,并返回右子树高度
//4、比较左右子树高度判断是否为平衡二叉树,并返回树高度
public boolean isBalance(Node head){
//是否为平衡二叉树
boolean[] res = new boolean[1];
res[0] = true;
getHeight(head, 1, res);
return res[0];
}
public int getHeight(Node head, int height, boolean[] res){
//边界条件
if(head == null){
return height;
}
//假设左子树的高度和是否为平衡二叉树已知(递归思想)
int LH = getHeight(head, height+1, res);
//如果左子树不为平衡二叉树,停止右子树遍历,直接返回左子树高度
if(!res[0]){
return height;
}
//假设右子树的高度和是否为平衡二叉树已知(递归思想)
int RH = getHeight(head, height+1, res);
if(!res[0]){
return height;
}
if(Math.abs(LH-RH)>1){
res[0] = false;
}
return Math.max(LH, RH);
}