[LeetCode] Problem 110 - Balanced Binary Tree

Given a binary tree, determine if it is height-balanced.

For this problem, a height-balanced binary tree is defined as:

a binary tree in which the depth of the two subtrees of every node never differ by more than 1.

Example

No.1

Given the following tree [3,9,20,null,null,15,7]:

1
2
3
4
5
  3
/ \
9 20
/ \
15 7

Return true.

No.2

Given the following tree [1,2,2,3,3,null,null,4,4]:

1
2
3
4
5
6
7
      1
/ \
2 2
/ \
3 3
/ \
4 4

Return false.

Code

1
2
3
4
5
6
public class TreeNode {
int val;
TreeNode left;
TreeNode right;
TreeNode(int x) { val = x; }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
// O(n) runtime, O(n) stack space – Bottom-up recursion
public boolean isBalanced(TreeNode root) {
return maxDepth(root) == -1 ? false : true;
}

private int maxDepth(TreeNode root) {
if (root == null)
return 0;

int leftDepth = maxDepth(root.left);

if (leftDepth == -1)
return -1;

int rightDepth = maxDepth(root.right);

if (rightDepth == -1)
return -1;

return (Math.abs(leftDepth - rightDepth) > 1) ? -1 : Math.max(leftDepth, rightDepth) + 1;
}