[LeetCode][JavaScript]House Robber III
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:
3 / \ 2 3 \ \ 3 1Maximum amount of money the thief can rob = 3 + 3 + 1 = 7.
Example 2:
3 / \ 4 5 / \ \ 1 3 1Maximum amount of money the thief can rob = 4 + 5 = 9.
住宅相连构成一颗树,偷了相邻的两家就会触发警报。求不触发警报最多能偷到多少。
把一个节点当前的val记做currVal,这个节点下面节点的最大值记做childVal。
对于一个节点,如果偷了,那就不能偷他的左右孩子。
如果不偷当前的节点,把左右子树的最大值相加。
1 /** 2 * Definition for a binary tree node. 3 * function TreeNode(val) { 4 * this.val = val; 5 * this.left = this.right = null; 6 * } 7 */ 8 /** 9 * @param {TreeNode} root 10 * @return {number} 11 */ 12 var rob = function(root) { 13 if(!root || root.length === 0) return 0; 14 var ret = getMax(root); 15 return Math.max(ret.curr, ret.child); 16 17 function getMax(node){ 18 var left = {curr: 0, child: 0}; 19 if(node.left !== null){ 20 left = getMax(node.left); 21 } 22 var right = {curr: 0, child: 0}; 23 if(node.right !== null){ 24 right = getMax(node.right); 25 } 26 return { 27 curr: node.val + left.child + right.child, 28 child: Math.max(left.curr, left.child) 29 + Math.max(right.curr, right.child) 30 }; 31 } 32 };