当前位置:网站首页>leetcode:337. 打家劫舍 III
leetcode:337. 打家劫舍 III
2022-08-10 16:39:00 【OceanStar的学习笔记】
题目来源
题目描述
struct TreeNode {
int val;
TreeNode *left;
TreeNode *right;
TreeNode() : val(0), left(nullptr), right(nullptr) {
}
TreeNode(int x) : val(x), left(nullptr), right(nullptr) {
}
TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {
}
};
class Solution {
public:
int rob(TreeNode* root) {
}
};
题目解析
对于每一个node,它有两种决策:
- 偷当前节点,那么它的左右子树均不能偷
- 不偷当前节点,那么它的左右子树可以偷也可以不偷
因此,每次都需要从左树和右树中我们都需要 偷,不偷的最大收益
class Solution {
struct Info{
int yes;
int no;
Info(int y, int n) : yes(y), no(n){
}
};
Info * process(TreeNode* root){
if(root == nullptr){
return new Info(0, 0);
}
auto left = process(root->left);
auto right = process(root->right);
int yes = 0, no = 0;
yes = root->val + left->no + right->no; // 偷当前节点,那么子节点均不能偷
no = std::max(left->yes, left->no) + std::max(right->yes, right->no); // 不偷当前节点,那么子节点可偷可不偷
return new Info(yes, no);
}
public:
int rob(TreeNode* root) {
auto item = process(root);
return std::max(item->yes, item->no);
}
};
类似题目
边栏推荐
猜你喜欢
随机推荐
一种新的测试方法:视觉感知测试
matsuri.icu 筛选单场直播中 指定用户的弹幕
docker中安装mysql
router.afterEach()
v-on补充:自定义参数传递和事件修饰符
一张图快速了解 Istio 的 EnvoyFilter
聊聊云原生数据平台
【随笔】自己看的... 保存
不爱生活的段子手不是好设计师|ONES 人物
Qt 绘图和绘图设备
从抖音到火山引擎——看流媒体技术演进和机会
How to use bitwise operators in C language
C:枚举的优缺
电力系统潮流【牛顿-拉夫逊法】(4节点、5节点、6节点、9节点)(Matlab代码实现)
Bitwarden:免费、开源的密码管理服务
C专家编程 第10章 再论指针 10.4 向函数传递一个一维数组
FTXUI按键和ROS2 CLI组合使用笔记(turtlesim+teleop)
网页分析和一些基础题目
2022 CCF China Open Source Conference Notice (Fourth Round)
v-bind指令:设置元素的属性