搜到一个节点时有两种选择:
1、取该节点的val和隔一层后面的搜索结果之和
2、不取该节点val,取相邻下一层的搜索结果
比较两种情况取较大的。
优化:
用map存好每个节点的结果,减少重复工作。
class Solution {
public:
unordered_map<TreeNode*, int> m;
int rob(TreeNode* root) {
if (root == NULL) return 0;
if (m.count(root)) return m[root];
int res = 0;
if (root->left) {
res += rob(root->left->left) + rob(root->left->right);
}
if (root->right) {
res += rob(root->right->left) + rob(root->right->right);
}
res = max(res+root->val, rob(root->left)+rob(root->right));
m[root] = res;
return res;
}
};
转载请注明原文地址: https://ju.6miu.com/read-36476.html