[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) }; } };
相关文章推荐
- JavaScript实现千位分隔
- Could not decode a text frame as UTF-8 的解决
- 使用Ext.widget()方法时弹出错误的问题
- javascript的封装实例
- javascript之异常处理
- JavascriptDOM对象小结
- js里跨浏览器事件监听
- 解析json格式的数据
- ExtJs之文本框及数字输入
- Javascript的封装
- ext.js的目录结构的简单解释
- [LeetCode][Java][JavaScript]Counting Bits
- JS---基础知识
- ExtJs之工具栏及菜单栏
- javascript 正则表达式
- Gson 常见json对象的解析
- C#中服务端接受前端JSON字符串转换成字典集合
- 欢迎使用CSDN-markdown编辑器
- 用javascript实现sliding door 的效果
- JS事件模型