Leetcode-337 House Robber III
作者:互联网
337. House Robber III
Medium
176635FavoriteShare
The thief has found himself a new place for his thievery again. There is only one entrance to this area, called the "root." Besides the root, each house has one and only one parent house. After a tour, the smart thief realized that "all houses in this place forms a binary tree". It will automatically contact the police if two directly-linked houses were broken into on the same night.
Determine the maximum amount of money the thief can rob tonight without alerting the police.
/**
* 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) {
if(root == NULL){
return 0;
}
if(root->left == NULL && root->right == NULL){
return root->val;
}
int l = rob(root->left);
int r = rob(root->right);
int ll,lr,rl,rr;
if(root->left && root->left->left){
ll = rob(root->left->left);
}
else{
ll = 0;
}
if(root->left && root->left->right){
lr = rob(root->left->right);
}
else{
lr = 0;
}
if(root->right && root->right->left){
rl = rob(root->right->left);
}
else{
rl = 0;
}
if(root->right && root->right->right){
rr = rob(root->right->right);
}
else{
rr = 0;
}
return max(l+r, root->val+ll+lr+rr+rl);
}
int max(int a, int b){
if(a>b){
return a;
}
else{
return b;
}
}
};
一直在理解错题意,首先是觉得答案应该是偶数行的value或者奇数行的value总和。
后来甚至开始写背包问题,每行的value和为背包中的元素,算最大值
但是忘记考虑了,相邻行但不是父子关系的也可以
其实就应该用递归来解决问题,在highlevel上思考就好了。
标签:right,return,int,House,337,root,III,rob,left 来源: https://blog.csdn.net/Andreadyx/article/details/101265370