打劫房屋III
来源:互联网 发布:黑马程序员官网 编辑:程序博客网 时间:2024/05/06 11:54
在上次打劫完一条街道之后和一圈房屋之后,窃贼又发现了一个新的可以打劫的地方,
* 但这次所有的房子组成的区域比较奇怪,聪明的窃贼考察地形之后,发现这次的地形是一颗二叉树。
* 与前两次偷窃相似的是每个房子都存放着特定金额的钱。你面临的唯一约束条件是:相邻的房子装着相互联系的防盗系统,
* 且当相邻的两个房子同一天被打劫时,该系统会自动报警。
算一算,如果今晚去打劫,你最多可以得到多少钱,当然在不触动报警装置的情况下。
样例
3
/ \
2 3
\ \
3 1
窃贼最多能偷窃的金钱数是 3 + 3 + 1 = 7.
3
/ \
4 5
/ \ \
1 3 1
* 但这次所有的房子组成的区域比较奇怪,聪明的窃贼考察地形之后,发现这次的地形是一颗二叉树。
* 与前两次偷窃相似的是每个房子都存放着特定金额的钱。你面临的唯一约束条件是:相邻的房子装着相互联系的防盗系统,
* 且当相邻的两个房子同一天被打劫时,该系统会自动报警。
算一算,如果今晚去打劫,你最多可以得到多少钱,当然在不触动报警装置的情况下。
样例
3
/ \
2 3
\ \
3 1
窃贼最多能偷窃的金钱数是 3 + 3 + 1 = 7.
3
/ \
4 5
/ \ \
1 3 1
窃贼最多能偷窃的金钱数是 4 + 5 = 9.
import java.util.Scanner;/** * 在上次打劫完一条街道之后和一圈房屋之后,窃贼又发现了一个新的可以打劫的地方, * 但这次所有的房子组成的区域比较奇怪,聪明的窃贼考察地形之后,发现这次的地形是一颗二叉树。 * 与前两次偷窃相似的是每个房子都存放着特定金额的钱。你面临的唯一约束条件是:相邻的房子装着相互联系的防盗系统, * 且当相邻的两个房子同一天被打劫时,该系统会自动报警。算一算,如果今晚去打劫,你最多可以得到多少钱,当然在不触动报警装置的情况下。样例 3 / \2 3 \ \ 3 1窃贼最多能偷窃的金钱数是 3 + 3 + 1 = 7. 3 / \ 4 5 / \ \ 1 3 1窃贼最多能偷窃的金钱数是 4 + 5 = 9. * * @author Dell * */public class Test535 { public static int houseRobber3(TreeNode root) { if(root==null) return 0; int[] result=postorder(root); return Math.max(result[0], result[1]); } public static int[] postorder(TreeNode root) { if(root==null) { return new int[]{0,0}; } int[] result=new int[2]; int[] left=postorder(root.left); int[] right=postorder(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; } public static TreeNode CreatTree(TreeNode t) //先序创建一颗二叉树,空节点用#代替 { Scanner sc=null; sc=new Scanner(System.in); t=creatNode(t,sc); return t; } private static TreeNode creatNode(TreeNode t, Scanner sc) { String temp=sc.next();if(temp.trim().equals("#")){return null;}else{t=new TreeNode(Integer.parseInt(temp));t.left=creatNode(t.left,sc);t.right=creatNode(t.right,sc);return t;}}public static void midorder(TreeNode t){if(t!=null){midorder(t.left);System.out.print(t.val+" ");midorder(t.right);}}public static void main(String[] args) {TreeNode t=null;t=CreatTree(t);//midorder(t); System.out.println(houseRobber3(t));}}
测试:如下面这颗二叉树
3
/ \
4 5
\ / \
6 7 9
/
8
则在程序中的输入输出为:
阅读全文
0 0
- 打劫房屋 III
- LintCode:打劫房屋 III
- 打劫房屋III
- 打劫房屋 III-LintCode
- 打劫房屋 II和打劫房屋 III
- **[Lintcode] House Rober III 打劫房屋 III
- LintCode 打劫房屋 I II III
- 535.House Robber III-打劫房屋 III(中等题)
- 打劫房屋
- 打劫房屋
- 打劫房屋
- LintCode-打劫房屋
- lintcode-打劫房屋
- 题目:打劫房屋
- LintCode-打劫房屋
- Lintcode打劫房屋
- 打劫房屋 II
- lintcode ----打劫房屋
- RcppArmadillo简明手册
- 实现atoi函数(string转integer)
- Java编程思想第四版课后习题--经典
- RIDE加载Selenium2Library总是显示红色的解决办法
- 排序总结
- 打劫房屋III
- 第一次就记录给java的第五次作业吧
- insmod: can't insert 'led.ko': invalid module format
- spring是什么鬼
- 【数据结构】单链表--进阶题目
- 洛谷Oj-奖学金-排序
- windows网络编程之Select模型基础知识
- python Socket之客户端和服务端握手
- java利用zxing生成二维码