平衡二叉树两种解法
自顶向下O(Nlog2N)
class Solution {
public boolean isBalanced(TreeNode root) {
if (root == null) return true;
int l = getHeight(root.left);
int r = getHeight(root.right);
if (Math.abs(l - r) > 1) return false;
return isBalanced(root.left) && isBalanced(root.right);
}
public int getHeight(TreeNode root) {
if (root == null) return 0;
return Math.max(getHeight(root.left), getHeight(root.right)) + 1;
}
}
自底向上O(N)
class Solution {
public boolean isBalanced(TreeNode root) {
return recur(root) != -1;
}
public int recur(TreeNode root) {
if (root == null) return 0;
int left = recur(root.left);
if (left == -1) return -1;
int right = recur(root.right);
if (right == -1) return -1;
return Math.abs(left - right) > 1 ? -1 : Math.max(left, right) + 1;
}
}