LeetCode - 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 1: Input: [3,2,3,null,3,null,1] 3 / \ 2 3 \ \ 3 1 Output: 7 Explanation: Maximum amount of money the thief can rob = 3 + 3 + 1 = 7. Example 2: Input: [3,4,5,1,3,null,1] 3 / \ 4 5 / \ \ 1 3 1 Output: 9 Explanation: Maximum amount of money the thief can rob = 4 + 5 = 9.
/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode() {} * TreeNode(int val) { this.val = val; } * TreeNode(int val, TreeNode left, TreeNode right) { * this.val = val; * this.left = left; * this.right = right; * } * } */ class Solution { public int rob(TreeNode root) { Map<TreeNode, Integer> map =new HashMap<>(); return helper(root, map); } public int helper(TreeNode node, Map<TreeNode, Integer> map) { if (node == null) { return 0; } if (map.containsKey(node)) { return map.get(node); } int val = 0; if (node.left != null) { val += helper(node.left.left, map) + helper(node.left.right, map); } if (node.right != null) { val += helper(node.right.right, map) + helper(node.right.left, map); } val = Math.max(val + node.val, helper(node.right, map) + helper(node.left, map)); map.put(node, val); return val; } }
posted on 2020-05-11 14:37 IncredibleThings 阅读(115) 评论(0) 收藏 举报
浙公网安备 33010602011771号