点击打开链接
class Solution {
public:
vector<int> dfs(TreeNode* root)
{
vector<int> res(2,0); //res[0]代表抢 res[1]代表不抢
if(root==NULL){
return res;
}
vector<int> lRes = dfs(root->left);
vector<int> rRes = dfs(root->right);
res[0] = lRes[1] + rRes[1] +root->val; //抢当前节点,左右孩子都不抢
res[1] = max(lRes[0], lRes[1])+max(rRes[0], rRes[1]); //不抢当前节点,左右节点可抢可不抢
return res;
}
int rob(TreeNode* root) {
vector<int> res = dfs(root);
return max(res[0], res[1]);
}
};