题目描述
判断一棵二叉树是否为平衡二叉树
实现思路
平衡二叉树是一棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。
抓住两个点:
- 左右子树也是平衡二叉树(想到递归)
- 左右子树高度差不超过1
public class IsBalanceOfTree {
public static class Node {
int val;
Node left;
Node right;
public Node(int data) {
this.val = data;
}
}
public static Boolean isBalanceTree(Node head) {
boolean[] res = new boolean[1];
res[0] = true;
getHeight(head, 1, res);
return res[0];
}
private static int getHeight(Node head, int level, boolean[] res) {
if (head == null) return level;
// 左子树
int lH = getHeight(head.left, level + 1, res);
if (!res[0]) return level;
int rH = getHeight(head.right, level + 1, res);
if (!res[0]) return level;
if (Math.abs(lH - rH) > 1) res[0] = false;
return Math.max(lH, rH);
}
}