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 179 Largest Number
- leetcode 24 Swap Nodes in Pairs
- leetcode 2 Add Two Numbers 方法1
- leetcode 2 Add Two Numbers 方法2
- leetcode----Longest Substring Without Repeating Characters
- [LeetCode]47 Permutations II
- [LeetCode]65 Valid Number
- [LeetCode]123 Best Time to Buy and Sell Stock III
- [LeetCode] String Reorder Distance Apart
- [LeetCode] Sliding Window Maximum
- [LeetCode] Find the k-th Smallest Element in the Union of Two Sorted Arrays
- [LeetCode] Determine If Two Rectangles Overlap
- [LeetCode] A Distance Maximizing Problem
- leetcode_linearList
- leetcode_linearList02
- 021-Merge Two Sorted Lists(合并两个排好序的单链表);leetcode
- LeetCode[Day 1] Two Sum 题解
- LeetCode[Day 2] Median of Two Sorted Arrays 题解
- LeetCode[Day 3] Longest Substring Without... 题解
- LeetCode [Day 4] Add Two Numbers 题解