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);}
};