码迷,mamicode.com
首页 > 其他好文 > 详细

LeetCode 337. House Robber III

时间:2016-04-12 21:01:32      阅读:339      评论:0      收藏:0      [点我收藏+]

标签:

一开始以为不直接连接的话就考虑隔层加钱,偶数层和奇数层分开算得两个结果,但是输入为[4,1,null,2,null,null,3]时最大值为4+3 = 7,4是第0层,3是3层。

因此要以节点为对象,而不是层。每个节点的情况分两种,抢和不抢,如果抢当前节点,那么左右节点不能抢;如果不抢,那么当前节点所得钱数为max(左抢,左不抢) + max(右抢,右不抢),注意不是左抢+右抢,不然上述的输入还是过不了。用递归实现。

12ms

 1 /**
 2  * Definition for a binary tree node.
 3  * struct TreeNode {
 4  *     int val;
 5  *     TreeNode *left;
 6  *     TreeNode *right;
 7  *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 8  * };
 9  */
10 class Solution {
11 public:
12     void helpRob(TreeNode* root, int& in, int& out){
13         if(!root) return;
14         int lin = 0, lout = 0, rin = 0, rout = 0;
15         helpRob(root->left, lin, lout);
16         helpRob(root->right, rin, rout);
17         in = lout + rout + root->val;
18         out = max(lin, lout) + max(rin, rout);
19     }
20     int rob(TreeNode* root) {
21         if(!root) return 0;
22         int in = 0, out = 0;
23         helpRob(root, in, out);
24         return max(in, out);
25     }
26 };

还有8ms算法,留坑

LeetCode 337. House Robber III

标签:

原文地址:http://www.cnblogs.com/co0oder/p/5384335.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!