这是第一次遇到 树形DP 的题目,结合递归回溯来处理dp问题感觉有点难。就去看了解析
要从局部分析
class Solution {
public:
int rob(TreeNode* root) {
auto res = dfs(root);
return max(res[0], res[1]);
}
vector<int> dfs(TreeNode* root) {
if (!root) return {0, 0};
auto l = dfs(root->left);
auto r = dfs(root->right);
int val1 = max(l[0], l[1]) + max(r[0], r[1]); // do not robber current house
int val2 = root->val + l[0] + r[0]; // robber
return {val1, val2};
}
};