这是第一次遇到 树形DP 的题目,结合递归回溯来处理dp问题感觉有点难。就去看了解析

要从局部分析

class Solution {
public:
    int rob(TreeNode* root) {
        auto res = dfs(root);
        return max(res[0], res[1]);
    }

    vector<int> dfs(TreeNode* root) {
        if (!root) return {0, 0};
        auto l = dfs(root->left);
        auto r = dfs(root->right);
        int val1 = max(l[0], l[1]) + max(r[0], r[1]); // do not robber current house
        int val2 = root->val + l[0] + r[0]; // robber
        return {val1, val2};
    }
};