LeetCode – House Robber III (Java)

The houses form a binary tree. If the root is robbed, its left and right can not be robbed.

Analysis

Traverse down the tree recursively. We can use an array to keep 2 values: the maximum money when a root is selected and the maximum value when a root if NOT selected.

Java Solution

```public int rob(TreeNode root) { if(root == null) return 0;   int[] result = helper(root); return Math.max(result[0], result[1]); }   public int[] helper(TreeNode root){ if(root == null){ int[] result = {0, 0}; return result; }   int[] result = new int[2]; int[] left = helper(root.left); int[] right = helper (root.right);   // result[0] is when root is selected, result[1] is when not. result[0] = root.val + left[1] + right[1]; result[1] = Math.max(left[0], left[1]) + Math.max(right[0], right[1]);   return result; }```
Category >> Algorithms
If you want someone to read your code, please put the code inside <pre><code> and </code></pre> tags. For example:
```<pre><code>
String foo = "bar";
</code></pre>
```