您的位置:首页 > Web前端 > JavaScript

[LeetCode][JavaScript]House Robber III

2016-03-19 22:56 651 查看

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.
https://leetcode.com/problems/house-robber-iii/

住宅相连构成一颗树,偷了相邻的两家就会触发警报。求不触发警报最多能偷到多少。
把一个节点当前的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)
};
}
};


  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: