题面描述
基本思路
树形dp
选取和不选取
分别用f和g存储
f表示选取o结点最大得到的答案
g表示不选取o结点最大得到的答案
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
unordered_map <TreeNode*, int> f, g;
void dfs(TreeNode* o) {
if (!o) {
return;
}
dfs(o->left);
dfs(o->right);
f[o] = o->val + g[o->left] + g[o->right];
g[o] = max(f[o->left], g[o->left]) + max(f[o->right], g[o->right]);
}
int rob(TreeNode* o) {
dfs(o);
return max(f[o], g[o]);
}
};