原题链接:337. 打家劫舍 III
solution:
树形dp,树形dp只需要考虑一部分局部情况就行.
class Solution {
public:
int rob(TreeNode* root) {
vector<int> f = dfs(root);
return max(f[0],f[1]);
}
//dfs返回选和不选root节点的最大值
vector<int> dfs(TreeNode *root) {
if(root == nullptr) return {0,0}; //如果为空返回
vector<int> f(2);
vector<int> left = dfs(root->left);
vector<int> right = dfs(root->right);
f[0] = max(left[0],left[1]) + max(right[0],right[1]);
f[1] = left[0] + right[0] + root->val;
return f;
}
};