首页 > 编程语言 > 详细

[LeetCode][JavaScript]House Robber III

时间:2016-03-20 00:29:53      阅读:269      评论:0      收藏:0      [点我收藏+]

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。
对于一个节点,如果偷了,那就不能偷他的左右孩子。
如果不偷当前的节点,把左右子树的最大值相加。
 
/**
 * Definition for a binary tree node.
 * function TreeNode(val) {
 *     this.val = val;
 *     this.left = this.right = null;
 * }
 */
/**
 * @param {TreeNode} root
 * @return {number}
 */
var rob = function(root) {
    if(!root || root.length === 0) return 0;
    var ret = getMax(root);
    return Math.max(ret.curr, ret.child);

    function getMax(node){
        var left = {curr: 0, child: 0};
        if(node.left !== null){
            left = getMax(node.left);
        }
        var right = {curr: 0, child: 0};
        if(node.right !== null){
            right = getMax(node.right);
        }
        return {
            curr: node.val + left.child + right.child,
            child: Math.max(left.curr, left.child)
                + Math.max(right.curr, right.child)
        };
    }
};

  

 
 
 
 

[LeetCode][JavaScript]House Robber III

原文:http://www.cnblogs.com/Liok3187/p/5296669.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!