[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   1
Maximum amount of money the thief can rob = 3 + 3 + 1 = 7.

 

Example 2:

     3
    / \
   4   5
  / \   \ 
 1   3   1
Maximum 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 };

 

  

 
 
 
 
posted @ 2016-03-19 22:56  `Liok  阅读(454)  评论(0编辑  收藏  举报