在上次打劫完一条街道之后和一圈房屋后,小偷又发现了一个新的可行窃的地区。这个地区只有一个入口,我们称之为“根”。 除了“根”之外,每栋房子有且只有一个“父“房子与之相连。一番侦察之后,聪明的小偷意识到“这个地方的所有房屋的排列类似于一棵二叉树”。 如果两个直接相连的房子在同一天晚上被打劫,房屋将自动报警。

计算在不触动警报的情况下,小偷一晚能够盗取的最高金额。

示例 1:

输入: [3,2,3,null,3,null,1]3/ \2   3\   \ 3   1输出: 7
解释: 小偷一晚能够盗取的最高金额 = 3 + 3 + 1 = 7.

示例 2:

输入: [3,4,5,1,3,null,1]3/ \4   5/ \   \ 1   3   1输出: 9
解释: 小偷一晚能够盗取的最高金额 = 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) {
        unordered_map<TreeNode*, int> m;
        return dfs(root, m);
    }
    int dfs(TreeNode *root, unordered_map<TreeNode*, int> &m) {
        if (!root) return 0;
        if (m.count(root)) return m[root];
        int val = 0;
        if (root->left) {
            val += dfs(root->left->left, m) + dfs(root->left->right, m);
        }
        if (root->right) {
            val += dfs(root->right->left, m) + dfs(root->right->right, m);
        }
        val = max(val + root->val, dfs(root->left, m) + dfs(root->right, m));
        m[root] = val;
        return val;
    }
};

337.打家劫舍III相关推荐

  1. 代码随想录Day48|198.打家劫舍、213.打家劫舍II、337.打家劫舍III

    文章目录 198.打0家劫舍 213.打家劫舍II 337.打家劫舍III 198.打0家劫舍 文章讲解:代码随想录 (programmercarl.com) 题目链接:198. 打家劫舍 - 力扣( ...

  2. day40|198.打家劫舍、213.打家劫舍II、337.打家劫舍III

    198.打家劫舍 你是一个专业的小偷,计划偷窃沿街的房屋.每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警 ...

  3. Day48 | 198. 打家劫舍 | 213.打家劫舍Il |337. 打家劫舍 III

    198. 打家劫舍 注意点: 1. 递推公式,dp[j-2]+nums[j]表示的是加上nums[j]后dp[j]的值, dp[j-1]表示的是不加nums[j]后dp[j-1]的最大值 class ...

  4. 337.打家劫舍 III 121. 买卖股票的最佳时机

    337.打家劫舍 III 树形dp,采用后序遍历,用dp[0],dp[1] 分别表示不取当前物品,和取当前物品的所获最大利润 /*** Definition for a binary tree nod ...

  5. leetcode 337. House Robber III | 337. 打家劫舍 III(树形dp;什么情况下dp需要强制包含当前元素?)

    题目 https://leetcode.com/problems/house-robber-iii/ 思考:什么情况下 dp 需要强制包含当前元素? dp 过程中,需要包含当前元素 的例子: leet ...

  6. LeetCode 337. 打家劫舍 III(记忆化+递归)

    文章目录 1. 题目 1.1 相关题目: 2. 解题 2.1 递归 2.2 记忆化递归 1. 题目 在上次打劫完一条街道之后和一圈房屋后,小偷又发现了一个新的可行窃的地区.这个地区只有一个入口,我们称 ...

  7. 104. Leetcode 337. 打家劫舍 III (动态规划-打家劫舍)

    步骤一.确定递归函数的参数和返回值: dp数组及下标的含义 dp数组的长度为2, 下标为0记录不偷该节点所得到的的最大金钱,下标为1记 录偷该节点所得到的的最大金钱. 步骤二.确定终止条件: 在遍历的 ...

  8. 【LeetCode笔记】337. 打家劫舍III(Java、树型动态规划)

    文章目录 题目描述 思路 & 代码 更新版 题目描述 这年头当个小偷,都得会 dp 和二叉树了 和前面的 I & II 有点不同,这次直接换了数据结构,写树来了.(之后不会是图吧) 很 ...

  9. leetcode —— 337. 打家劫舍 III

    在上次打劫完一条街道之后和一圈房屋后,小偷又发现了一个新的可行窃的地区.这个地区只有一个入口,我们称之为"根". 除了"根"之外,每栋房子有且只有一个" ...

  10. 337. 打家劫舍 III(JavaScript)

    //当前节点:偷(当前节点值,左右节点不取)//不偷(当前节点不取,递归选择左右节点取还是不取) var rob = function(root) {const dd=function(root){/ ...

最新文章

  1. 测试集没有标签,应该怎么办?
  2. Entity Framework 出现 此 ObjectContext 实例已释放,不可再用于需要连接的操作 的错误...
  3. memcache nginx
  4. 揭秘猪八戒调戏嫦娥背后的阴谋
  5. cannot delete activity in SAP CRM WebClient UI
  6. FarMap诞生了!
  7. 浅析“高斯白噪声”,“泊松噪声”,“椒盐噪声”的区别
  8. 虚拟机系列 | JVM类加载机制
  9. java 中 正则 正则表达式 匹配 url
  10. 简易OA漫谈之工作流设计(五,直接上级)
  11. awd赛题的flag是什么意思_记一次AWD自动获取flag并提交
  12. 4)Thymeleaf th:each 循环迭代与 th:if、th:switch 条件判断
  13. 推荐使用maven生成mybatis代码
  14. php smarty 调试模式,Smarty3调试
  15. swing宾馆客房管理系统(文档)
  16. 随机生成三位密码,然后穷举法破解密码
  17. java提取图片文字
  18. 厦大C语言上机 1394 抛硬币
  19. 曲率以及曲率半径推导
  20. 每日新闻丨软件业务收入64616亿元;工信部发话广电5G正式启动

热门文章

  1. 【转】el-table复选框分页记忆-非:reserve-selection=true模式
  2. 谁用光了磁盘?Docker System命令详解
  3. 【转】保证训练集和测试集取到和数据集中相同比例的类别
  4. CentOS 6.5安装YouCompleteMe使用vim C/C++语法自动补全
  5. linux与windows文件共享——samba
  6. 为Google Reader守夜。。。
  7. 大数据概念思维导图_【数据整理】一份思维导图,学完Tableau Prep(下)
  8. 有关分组、帧、报文、比特流的问题
  9. 2022年寒假ACM练习1
  10. python开发的代码如何加密_python 代码加密