什么是平衡二叉树?
一个树中,每一棵子树的左树高度减右树高度的高度差不超过1,那整棵树就为平衡树。
分析:
- 如果一棵树的的头节点为X,那么X的左子树整体是一颗平衡树,右子树整体也是一颗平衡树,并且相减的高度差不超过1,那么X就是一颗平衡树。
- 所以,递归遍历左子树和右子树,获取每一棵树的高度,并判断是否是平衡二叉树。
代码实现:
public static class Info {
public boolean isBalance;
public int height;
public Info(boolean isBalance, int height) {
this.isBalance = isBalance;
this.height = height;
}
}
public static boolean isBalance(TreeNode root) {
return process(root).isBalance;
}
public static Info process(TreeNode root) {
if (root == null) {
return new Info(true, 0);
}
Info leftInfo = process(root.left);
Info rightInfo = process(root.right);
int height = Math.max(leftInfo.height, rightInfo.height) + 1;
boolean isBalance = leftInfo.isBalance && rightInfo.isBalance
&& Math.abs(leftInfo.height - rightInfo.height) < 2;
return new Info(isBalance, height);
}