LeetCode – House Robber III (Java)

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


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:
String foo = "bar";