平衡二叉树:
递归思路
在求解二叉树问题的时候,列可能性:假设可以向左/右树要信息的情况下,利用左右树的信息解决问题。
例如:
如果一个二叉树是平衡二叉树,列举可能性:
1)左子树是平衡二叉树
2)右子树是平衡二叉树
3) |左高-右高| <=1
只有以上三个条件都满足才是平衡二叉树
public static boolean isBalanced2(Node head) {
return process(head).isBalanced;
}
public static class Info{
public boolean isBalanced;
public int height;
public Info(boolean i, int h) {
isBalanced = i;
height = h;
}
}
public static Info process(Node x) {
if(x == null) {
return new Info(true, 0);
}
Info leftInfo = process(x.left);
Info rightInfo = process(x.right);
int height = Math.max(leftInfo.height, rightInfo.height) + 1;
boolean isBalanced = true;
if(!leftInfo.isBalanced) {
isBalanced = false;
}
if(!rightInfo.isBalanced) {
isBalanced = false;
}
if(Math.abs(leftInfo.height - rightInfo.height) > 1) {
isBalanced = false;
}
return new Info(isBalanced, height);
}