class Solution {
public:
pair<int,int> dfs(TreeNode* root) {
if(!root)return {0,0} ;
pair<int,int> l=dfs(root->left);
pair<int,int> r=dfs(root->right);
int choose=root->val+l.second+r.second;//如果选这个节点,那么他的子节点都不能选
int nochoose=max(l.first,l.second)+max( r.first,r.second);//如果不选,取子节点选与不选时得到的最大值
return {choose,nochoose};
}
int rob(TreeNode* root) {
pair<int,int>res=dfs(root);
return max(res.first,res.second);
}
};