1 /** 2 * Definition for a binary tree node. 3 * struct TreeNode { 4 * int val; 5 * TreeNode *left; 6 * TreeNode *right; 7 * TreeNode(int x) : val(x), left(NULL), right(NULL) {} 8 * }; 9 */ 10 class Solution 11 { 12 unordered_map<TreeNode *, int> sums;//记忆化搜索 13 public: 14 int rob(TreeNode* root) 15 { 16 return tryRob(root); 17 } 18 19 int tryRob(TreeNode* node) 20 { 21 if (!node) return 0; 22 if (sums.count(node)) return sums[node]; 23 24 //偷取该节点 25 int res1 = 0; 26 if(node->left) res1 += (tryRob(node->left->left) + tryRob(node->left->right)); 27 if(node->right) res1 += (tryRob(node->right->left) + tryRob(node->right->right)); 28 res1 += node->val; 29 30 //不偷取该节点 31 int res2 = tryRob(node->left) + tryRob(node->right); 32 sums[node] = max(res1, res2); 33 return sums[node]; 34 } 35 };
原文:https://www.cnblogs.com/yuhong1103/p/12750978.html