337. House Robber III

来源:互联网 发布:收购淘宝买家资料 编辑:程序博客网 时间:2024/06/14 19:56

本题

The thief has found himself a new place for his thievery again. There is only one entrance to this area, called the "root." Besides the root, each house has one and only one parent house. After a tour, the smart thief realized that "all houses in this place forms a binary tree". It will automatically contact the police if two directly-linked houses were broken into on the same night.

Determine the maximum amount of money the thief can rob tonight without alerting the police.

Example 1:

     3    / \   2   3    \   \      3   1
Maximum amount of money the thief can rob = 3 + 3 + 1 = 7.

Example 2:

     3    / \   4   5  / \   \ 
我们维护一个大小为2的数组,res,res【0】存储抢劫此房最大获利,res【1】存储不抢劫此房间最大获利。随后我们在深度遍历的基础上,利用公式
res[0] = root.val+left[1]+right[1];//子房间不能被抢劫res[1] = Math.max(left[0], left[1])+ Math.max(right[0], right[1]);//子房间可以被抢劫或者不被抢劫,返回最大值。
其中left,right数组为递归调用robber函数返回的当前节点左右子节点的被抢劫或者不被抢劫最大获利。
返回res。
class Solution {        public int rob(TreeNode root) {        int[] nums = robber(root);        return Math.max(nums[0], nums[1]);    }private int[] robber(TreeNode root) {if(root==null){return new int[2];}int[] left = robber(root.left);int[] right = robber(root.right);int[] res = new int [2];res[0] = root.val+left[1]+right[1];res[1] = Math.max(left[0], left[1])+ Math.max(right[0], right[1]);return res;}}

原创粉丝点击