打劫房屋III

来源:互联网 发布:黑马程序员官网 编辑:程序博客网 时间:2024/05/06 11:54
在上次打劫完一条街道之后和一圈房屋之后,窃贼又发现了一个新的可以打劫的地方,
 * 但这次所有的房子组成的区域比较奇怪,聪明的窃贼考察地形之后,发现这次的地形是一颗二叉树。
 * 与前两次偷窃相似的是每个房子都存放着特定金额的钱。你面临的唯一约束条件是:相邻的房子装着相互联系的防盗系统,
 * 且当相邻的两个房子同一天被打劫时,该系统会自动报警。
算一算,如果今晚去打劫,你最多可以得到多少钱,当然在不触动报警装置的情况下。
样例
  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

则在程序中的输入输出为:




原创粉丝点击