leetcode-377-打家劫舍

/**

 * Definition for a binary tree node.

 * struct TreeNode {

 *     int val;

 *     TreeNode *left;

 *     TreeNode *right;

 *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}

 * };

 */

class Solution {

public:

    int rob(TreeNode* root) {

        dfs(root);

        return max(pk[root], unpk[root]);

    }

 

private:

    unordered_map<TreeNode*, int> pk, unpk;

    void dfs(TreeNode* root) {

        if (root) {

            dfs(root->left);

            dfs(root->right);

            pk[root] = unpk[root->left] + unpk[root->right] + root->val;

            unpk[root] = max(pk[root->left], unpk[root->left]) + max(pk[root->right], unpk[root->right]);

        }

        return;

    }

};

相关文章: