LintCode:打劫房屋 III
2016-12-07 20:25
274 查看
在上次打劫完一条街道之后和一圈房屋之后,窃贼又发现了一个新的可以打劫的地方,但这次所有的房子组成的区域比较奇怪,聪明的窃贼考察地形之后,发现这次的地形是一颗二叉树。与前两次偷窃相似的是每个房子都存放着特定金额的钱。你面临的唯一约束条件是:相邻的房子装着相互联系的防盗系统,且当相邻的两个房子同一天被打劫时,该系统会自动报警。
算一算,如果今晚去打劫,你最多可以得到多少钱,当然在不触动报警装置的情况下。
注意事项
这题是House Robber和House
Robber II的扩展,只不过这次地形由直线和圈变成了二叉树
您在真实的面试中是否遇到过这个题?
Yes
样例
窃贼最多能偷窃的金钱数是 3 + 3 + 1 = 7.
窃贼最多能偷窃的金钱数是 4 + 5 = 9.
标签
深度优先搜索 优步
class Solution {
public:
/**
* @param root: The root of binary tree.
* @return: The maximum amount of money you can rob tonight
*/
typedef struct result
{
int p; //该节点的最大值
int pp; //该节点左儿子与右儿子的和
}RES;
//采用深度优先搜索,从底部往上计算
RES Robber(TreeNode* node)
{
RES r,r1,r2;
if(node == NULL)
{
r.p = 0;
r.pp = 0;
return r;
}
r1 = Robber(node->left);
r2 = Robber(node->right);
//每个节点的值等于
//(两个儿子的和)与(该节点与四个孙子的和)之间的最大值
r.p = max(node->val + r1.pp + r2.pp, r1.p + r2.p);
r.pp = r1.p + r2.p;
return r;
}
int houseRobber3(TreeNode* root) {
// write your code here
RES r = Robber(root);
return r.p;
}
};
算一算,如果今晚去打劫,你最多可以得到多少钱,当然在不触动报警装置的情况下。
注意事项
这题是House Robber和House
Robber II的扩展,只不过这次地形由直线和圈变成了二叉树
您在真实的面试中是否遇到过这个题?
Yes
样例
3 / \ 2 3 \ \ 3 1
窃贼最多能偷窃的金钱数是 3 + 3 + 1 = 7.
3 / \ 4 5 / \ \ 1 3 1
窃贼最多能偷窃的金钱数是 4 + 5 = 9.
标签
深度优先搜索 优步
class Solution {
public:
/**
* @param root: The root of binary tree.
* @return: The maximum amount of money you can rob tonight
*/
typedef struct result
{
int p; //该节点的最大值
int pp; //该节点左儿子与右儿子的和
}RES;
//采用深度优先搜索,从底部往上计算
RES Robber(TreeNode* node)
{
RES r,r1,r2;
if(node == NULL)
{
r.p = 0;
r.pp = 0;
return r;
}
r1 = Robber(node->left);
r2 = Robber(node->right);
//每个节点的值等于
//(两个儿子的和)与(该节点与四个孙子的和)之间的最大值
r.p = max(node->val + r1.pp + r2.pp, r1.p + r2.p);
r.pp = r1.p + r2.p;
return r;
}
int houseRobber3(TreeNode* root) {
// write your code here
RES r = Robber(root);
return r.p;
}
};
相关文章推荐
- 打劫房屋 III-LintCode
- **[Lintcode] House Rober III 打劫房屋 III
- lintcode:打劫房屋 III
- LintCode 打劫房屋 I II III
- 打劫房屋 II-LintCode
- LintCode(M)打劫房屋(动态规划)
- LintCode(M)打劫房屋2——动态规划
- *[Lintcode]House Robber 打劫房屋
- [Lintcode] #392 打劫房屋
- 【LintCode】打劫房屋
- lintcode打劫房屋
- lintcode-打劫房屋
- 打劫房屋-LintCode
- lintcode ----打劫房屋
- 【LintCode】打劫房屋
- LintCode-打劫房屋
- lintcode--打劫房屋
- LintCode-打劫房屋
- lintcode---打劫房屋I 打劫房屋II
- 打劫房屋 II和打劫房屋 III