[leetcode] problem 337 – house robber iii

The thief has found himself a new place for his thievery again. There is only one entrance to this area, called the “root.” Besides the root, each house has one and only one parent house. After a tour, the smart thief realized that “all houses in this place forms a binary tree”. It will automatically contact the police if two directly-linked houses were broken into on the same night.

Determine the maximum amount of money the thief can rob tonight without alerting the police.

Example

No.1

Input: [3,2,3,null,3,null,1]

1
2
3
4
5
  3
/
2 3

3 1

Output: 7

Explanation: Maximum amount of money the thief can rob = 3 + 3 + 1 = 7.

No.2

Input: [3,4,5,1,3,null,1]

1
2
3
4
5
    3
/
4 5
/
1 3 1

Output: 9

Explanation: Maximum amount of money the thief can rob = 4 + 5 = 9.

Code

1
2
3
4
5
6
public class  {
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
public int rob(TreeNode root) {
int[] result = helper(root);
return Math.max(result[0], result[1]);
}

private int[] helper(TreeNode root) {
if (root == null)
return new int[] {0, 0};

int[] left = helper(root.left);
int[] right = helper(root.right);

int[] res = new int[2];
res[0] = Math.max(left[0], left[1]) + Math.max(right[0], right[1]);
res[1] = left[0] + right[0] + root.val;
return res;
}