Description

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

  3
 / \
2   3
 \   \ 
  3   1

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

    3
   / \
  4   5
 / \   \ 
1   3   1

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

Solution

root点的结果基于两个状态-包含root和不包含root
包含root时,结果=(root.left不论包不包含root.left点的最大值)+(root.right不论包不包含root.right点的最大值)
不包含root时,结果=root的value + root.left上不包含root.left点的结果 + root.right上不包含root.right的结果

因此用一个长度为2的数组表示root点的结果,dp[0]表示不包含root的结果,dp[1]表示包含root的结果,得到状态方程
dp[0] = Math.max(left[0], left[1]) + Math.max(right[0], right[1]);

dp[1] = root.val + left[0] + right[0]; left上不含left的结果+right上不含right的结果

/**
 * Definition of TreeNode:
 * public class TreeNode {
 *     public int val;
 *     public TreeNode left, right;
 *     public TreeNode(int x) { val = x; }
 * }
 */


public class Solution {
    /*
     * @param root: The root of binary tree.
     * @return: The maximum amount of money you can rob tonight
     */
    public int houseRobber3(TreeNode root) {
        // write your code here
        int[] dp = houseRobber3Helper(root);
        return Math.max(dp[0], dp[1]);
    }

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

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

results matching ""

    No results matching ""