题目

打劫房屋 III

在上次打劫完一条街道之后和一圈房屋之后,窃贼又发现了一个新的可以打劫的地方,但这次所有的房子组成的区域比较奇怪,聪明的窃贼考察地形之后,发现这次的地形是一颗二叉树。与前两次偷窃相似的是每个房子都存放着特定金额的钱。你面临的唯一约束条件是:相邻的房子装着相互联系的防盗系统,且当相邻的两个房子同一天被打劫时,该系统会自动报警

算一算,如果今晚去打劫,你最多可以得到多少钱,当然在不触动报警装置的情况下。

样例

  3/ \
2   3\   \ 3   1

窃贼最多能偷窃的金钱数是 3 + 3 + 1 = 7.

    3/ \4   5/ \   \
1   3   1

窃贼最多能偷窃的金钱数是 4 + 5 = 9.

解题

参考链接

后序遍历二叉树,每次遍历返回两个值:分别表示偷窃或者不偷窃当前节点可以获得的最大收益。

程序

/*** Definition of TreeNode:* public class TreeNode {*     public int val;*     public TreeNode left, right;*     public TreeNode(int x) { val = x; }* }*/
public class Solution {/*** @param root: The root of binary tree.* @return: The maximum amount of money you can rob tonight*/public int houseRobber3(TreeNode root) {// write your code hereint[] result = postTraver(root);return Math.max(result[0], result[1]);}public int[] postTraver(TreeNode root) {if(root == null) return new int[]{0, 0};int[] result = new int[2];int[] left = postTraver(root.left);int[] right = postTraver(root.right);//表示偷result[0] = left[1] + right[1] + root.val;//表示不偷result[1] = Math.max(left[0], left[1]) + Math.max(right[0], right[1]);return result;}}

博客中讲解:

对当前节点为根节点的树进行讨论,有打劫和不打劫当前节点两种可能。如果打劫,则不能打劫其子节点;否则可以打劫其子节点。则其能获得的最大金钱为打劫和不打劫当前节点两种可能中的最大值。

好像就是这样理解的。。。

转载于:https://www.cnblogs.com/theskulls/p/5538291.html

lintcode:打劫房屋 III相关推荐

  1. LintCode刷题——打劫房屋I、II、III

    打劫房屋I: 题目内容: 假设你是一个专业的窃贼,准备沿着一条街打劫房屋.每个房子都存放着特定金额的钱.你面临的唯一约束条件是:相邻的房子装着相互联系的防盗系统,且 当相邻的两个房子同一天被打劫时,该 ...

  2. LeetCode 392打劫房屋 python

    描述 假设你是一个专业的窃贼,准备沿着一条街打劫房屋.每个房子都存放着特定金额的钱.你面临的唯一约束条件是:相邻的房子装着相互联系的防盗系统,且 当相邻的两个房子同一天被打劫时,该系统会自动报警. 给 ...

  3. Leetcode 534打劫房屋II python

    描述 在上次打劫完一条街道之后,窃贼又发现了一个新的可以打劫的地方,但这次所有的房子围成了一个圈,这就意味着第一间房子和最后一间房子是挨着的.每个房子都存放着特定金额的钱.你面临的唯一约束条件是:相邻 ...

  4. lintcode 动态规划问题

    前言 第二周我们计划刷动态规划的题目,由于题目较多.我们选取出现频率最高的十道题目. 此次参与刷题的有五人(嘟嘟.琼琼.东东.大智.博主) 正题 94.二叉树中的最大路径和 1.dp[father] ...

  5. LintCode-打劫房屋

    打劫房屋 假设你是一个专业的窃贼,准备沿着一条街打劫房屋.每个房子都存放着特定金额的钱.你面临的唯一约束条件是:相邻的房子装着相互联系的防盗系统,且 当相邻的两个房子同一天被打劫时,该系统会自动报警. ...

  6. python3的各种经典案例,总共299个案例,直接可以运行(中:100个案例)

    一. python3的各种经典案例,总共299个案例,直接可以运行(前:100个案例) 二. python3的各种经典案例,总共299个案例,直接可以运行(中:100个案例) 三. python3的各 ...

  7. 面试必备:高频算法题汇总「图文解析 + 教学视频 + 范例代码」之 字符串处理+动态规划 合集!

    Attention 秋招接近尾声,我总结了 牛客.WanAndroid 上,有关笔试面经的帖子中出现的算法题,结合往年考题写了这一系列文章,所有文章均与 LeetCode 进行核对.测试.欢迎食用 本 ...

  8. 如何准备校招技术面试+一只小菜鸟的面试之路

    校招一路走来很幸运,从最初的迷茫,到偶尔的被否认,然后慢慢调整心态,有缺憾才能有进步,正视的自己不足,静下心努力提高,勇敢尝试各种面试机会,因上努力,果上随缘,慢慢看到改变,收获肯定,重拾信心. 校招 ...

  9. Python 相较于Java 而言,有什么优势?

    从头开始,Python就赢了.上图为证: 人生苦短,快用Python! Python的核心优势总结起来无非就是以下三个方面: 代码语言简洁,刷题性价比高 时代偏爱Python,学习人数爆炸式增长 大厂 ...

最新文章

  1. Hibernate框架--学习笔记(中):一对多配置、多对多配置
  2. Pentium 4处理器架构/微架构/流水线 (10) - NetBurst执行核详解 - 高速缓存/数据预取
  3. mySql版本的相关问题:com.mysql.cj.jdbc.Driver和com.mysql.jdbc.Driver
  4. HDU1166 敌兵布阵【树状数组】
  5. 二端口网络的归一化转移矩阵[a]
  6. fat linux 链接,FAT格式磁盘镜像制作方法
  7. tween.js 中文使用指南
  8. cisco 以太通道(端口聚合)配置样例
  9. 文档写作利器:Markdown
  10. 视频:这不是科幻,厉害了,用人工智能修长城
  11. 银河麒麟设置静态IP
  12. 孙子兵法之36计详解
  13. 利用计算机名称共享打印机步骤,如何连接其他电脑共享的打印机(图文教程)...
  14. 【转载】nuke命令行渲染方法-多线程渲染!
  15. 送分题 - hzw模拟赛Test10
  16. android ndk neon,Android NDK开发之 NEON使用介绍
  17. Nios II的Boot过程分析
  18. USB OTG简介、与普通USB线的区别
  19. 无限位小写金额转换大写金额(修订版)
  20. 三步简单实现直播干货

热门文章

  1. mysql providername_c#访问各数据库的providerName各驱动-阿里云开发者社区
  2. php之工作积累 (一)
  3. 【深度学习】keras框架使用预训练模型进行Finetune的应用
  4. python【蓝桥杯vip练习题库】ALGO-75筛选号码(约瑟夫环)
  5. python【蓝桥杯vip练习题库】BASIC-18 矩形面积交(线段交)
  6. 【Network Security!】ping命令的用法(全)
  7. python【Matlibplot绘图库】-主要概念
  8. Python中的排序sorted(d.items(), key=lambda x: x[1])
  9. opengl正方形绕点旋转_中考热点:再说旋转动点问题中的最值问题之提分攻略
  10. java特征向量计算_用Java和Python计算特征向量的差异