题意:House Robber 的衍生题,将房子的排列由直线改成了二叉树。
思路:DFS,在此基础上运用DP。
/**
* 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) {
pair<int, int> re;
re = dfs(root);
return re.first;
}
pair<int, int> dfs(TreeNode* root) {
pair<int, int> ret;
ret.first = 0;
ret.second = 0;
if(root == NULL) return ret;
pair<int, int> p1;
pair<int, int> p2;
p1 = dfs(root->left);
p2 = dfs(root->right);
ret.first = root->val + p1.second + p2.second;
ret.second = p1.first + p2.first;
if(ret.second > ret.first) ret.first = ret.second;
return ret;
}
};

682

被折叠的 条评论
为什么被折叠?



