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 1Maximum amount of money the thief can rob = 3 + 3 + 1 = 7 .
Example 2:
3 / \ 4 5 / \ \ 1 3 1Maximum amount of money the thief can rob = 4 + 5 = 9 .
遍历二叉树的过程中保存一个二维数组,分别保存不包含当前节点值的最大和值(即左右子节点最大和)和包含当前节点值的最大值
public class Solution {
public int rob(TreeNode root) {
int[] ans = helper(root);
return Math.max(ans[0], ans[1]);
}
//[0]为左右子节点的最大和,[1]为包含当前节点的最大和
private int[] helper(TreeNode root){
int[] ans = new int[]{0, 0};
if(root==null) return ans;
int[] left = helper(root.left);
int[] right = helper(root.right);
ans[0] = Math.max(left[0], left[1])+Math.max(right[0], right[1]);
ans[1] = left[0]+right[0]+root.val;
return ans;
}
}