EbowTang的练习场

1,新手需要努力,高手更需要努力。2,性格大于能力。3，解决问题的能力决定未来。...

<LeetCode OJ> 337. House Robber III

Total Accepted: 1341 Total Submissions: 3744 Difficulty: Medium

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

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

Example 2:

     3
/ \
4   5
/ \   \
1   3   1

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

/**
* 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;
queue<TreeNode*> que;//用来总是保存当层的节点
que.push(root);
int oddsum =root->val;//用于统计奇数层的和
int evensum=0;  //用于统偶数层的和
//获取每一层的节点
int curlevel=2;
while(!que.empty())
{
int levelSize = que.size();//通过size来判断当层的结束
for(int i=0; i<levelSize; i++)
{
if(que.front()->left != NULL) //先获取该节点下一层的左右子，再获取该节点的元素，因为一旦压入必弹出，所以先处理左右子
que.push(que.front()->left);
if(que.front()->right != NULL)
que.push(que.front()->right);
if(curlevel % 2 ==1)
oddsum  += que.front()->val;
else
evensum += que.front()->val;
que.pop();
}
curlevel++;
}
return oddsum > evensum ? oddsum : evensum;//奇数层的和与偶数层的和谁更大谁就是结果
}
};

int rob(TreeNode* root) {
int child = 0, childchild = 0;
rob(root, child, childchild);
return max(child, childchild);
}

void rob(TreeNode* root, int &child, int &childchild) {
if(!root) return;

int l1 = 0, l2 = 0, r1 = 0, r2 = 0;
rob(root->left, l1, l2);
rob(root->right, r1, r2);

child = l2 + r2 + root->val;
childchild = max(l1, l2) + max(r1, r2);
}

[leetcode] 337. House Robber III

2016-03-12 20:20:56

[leetcode-337]House Robber III(java)

2016-03-27 22:19:41

leetcode 337. House Robber III-动态规划|Java|Python简洁高效

2016-03-13 21:06:45

LeetCode337. House Robber III

2016-03-23 20:34:40

leetcode之House Robber(打家劫舍)

2015-11-05 20:24:01

LeetCode 337. House Robber III（小偷游戏）

2016-04-30 06:12:14

198. House Robber [easy] (Python)

2016-06-01 14:39:22

House Robber III 问题及解法

2017-09-14 10:31:55

leetCode198-House Robber

2015-04-01 18:28:58

leetcode 213 : House Robber II

2015-05-21 07:36:47