您的位置:首页 > 其它

337 leetcode House Robber III

2016-06-22 09:50 381 查看

337 leetcode House Robber III

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.

Example 1:

3
/ \


2 3

\ \

3 1

3
/ \


2 3

\ \

3 1

Maximum amount of money the thief can rob = 3 + 3 + 1 = 7.

Example 2:

3
/ \


4 5

/ \ \

1 3 1

3
/ \


4 5

/ \ \

1 3 1

Maximum amount of money the thief can rob = 4 + 5 = 9.

为啥我的代码通不过

#include <iostream>

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)
return 0;
std::queue<TreeNode*> level[2];
int current = 0;
int next =1;
int sum[2] = {0, 0};

level[0].push(root);
while(!level[0].empty() || !level[1].empty())
{
TreeNode* pNode = level[current].top();
level[0].pop();
sum[current] += pNode->val;
if(current == 0){
if(pNode->left != NULL)
level[next].push(pNode->left);
if(pNode->right != NULL)
level[next].push(pNOde->right);
}
else{
if(pNode->left != NULL)
level[next].push(pNode->left);
if(pNode->right != NULL)
level[next].push(pNode->right);
}
if(level[current].empty()){
current = 1-current;
next = 1- next;
}

}
return sum[0]>sum[1]?sum[0]: sum[1];

}
};


不就是计算奇偶层的和么

参考别人的代码:

C++

class Solution {
public:
int rob(TreeNode* root) {
return dfs(root).first;
}

pair<int, int> dfs(TreeNode* root){
pair<int, int> dp = make_pair(0,0);
if(root){
pair<int, int> dp_L = dfs(root->left);
pair<int, int> dp_R = dfs(root->right);
dp.second = dp_L.first + dp_R.first;
dp.first = max(dp.second ,dp_L.second + dp_R.second + root->val);
}
return dp;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  leetcode