class Solution {
public:
int rob(TreeNode* root) {
vector<int> ans = dfs(root);
return max(ans[0],ans[1]);
}
vector<int> dfs(TreeNode* root)
{
if(root == nullptr) return {0,0};
vector<int> left = dfs(root->left);
vector<int> right = dfs(root->right);
return {root->val+left[1]+right[1],max(left[0],left[1]) + max(right[0],right[1])};
}
};