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.ide
Determine the maximum amount of money the thief can rob tonight without alerting the police.this
Example 1:spa
3 / \ 2 3 \ \ 3 1
Maximum amount of money the thief can rob = 3 + 3 + 1 = 7.code
Example 2:orm
3 / \ 4 5 / \ \ 1 3 1
Maximum amount of money the thief can rob = 4 + 5 = 9.blog
思路get
rob兩種狀況:1.取當前節點以及當前節點的孫子節點的值的和 2.取當前節點的孩子節點的值的和。而後取二者最大值.it
class TreeNode { int val; TreeNode left; TreeNode right; TreeNode(int x) { val = x; } } public class Solution { public int helprob(Map<TreeNode, Integer> map, TreeNode root) { if(root == null){ return 0; } if(map.containsKey(root)){ return map.get(root); } int res = 0; if(root.left != null){ res += helprob(map, root.left.left) + helprob(map, root.left.right); } if(root.right != null){ res += helprob(map, root.right.left) + helprob(map, root.right.right); } res = Math.max(root.val + res, helprob(map, root.left) + helprob(map, root.right)); map.put(root, res); return res; } public int rob(TreeNode root){ //定義一個map來存儲取每一個節點的最大值 Map<TreeNode, Integer> map = new HashMap<>(); return helprob(map, root); } }