cpp
class Solution {
public:
pair<int,int> dfs_rob(TreeNode *root){
//如果为根节点
if(root==nullptr)
return {0,0};
auto [l,l_n]=dfs_rob(root->left);
auto [r,r_n]=dfs_rob(root->right);
int o=l_n+r_n+root->val;//当前节点偷,所获得的利益,子节点不能偷
int o_n=max(l,l_n)+max(r,r_n); //当前节点不偷,左右子节点分别返回最大的值
return {o,o_n};//返回当前节点偷、不偷情况下的最大利益
}
int rob(TreeNode* root) {
auto [l,r]=dfs_rob(root);
return max(l,r);
}
};