252.LeetCode | 337. 打家劫舍 III
Posted 每天一个开发小知识
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了252.LeetCode | 337. 打家劫舍 III相关的知识,希望对你有一定的参考价值。
每天一个开发小知识
01
某地所有房屋的排列类似于一棵二叉树
如果两个直接相连的房子在同一天晚上被打劫,房屋将自动报警
计算在不触动警报的情况下,小偷一晚能够盗取的最高金额。
示例 1
输入: [3,2,3,null,3,null,1]
3
/ \
2 3
\ \
3 1
输出: 7
解释: 小偷一晚能够盗取的最高金额 = 3 + 3 + 1 = 7
递归
前/中/后序遍历
递归+
/**
* 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) {
return max(Do(root, 0), Do(root, 1));
}
int Do(TreeNode * node, int type) { // type: 0表示不打劫当前节点,1表示打劫当前节点
if (NULL == node)
{
return 0;
}
if (NULL == node->left && NULL == node->right)
{
if (0 == type)
{
return 0;
}
else
{
return node->val;
}
}
if (0 == type)
{
return max(Do(node->left, 0), Do(node->left, 1)) + max(Do(node->right, 0), Do(node->right, 1));
}
else
{
return node->val + Do(node->left, 0) + Do(node->right, 0);
}
}
};
以上是关于252.LeetCode | 337. 打家劫舍 III的主要内容,如果未能解决你的问题,请参考以下文章