LeetCode337

    技术2022-07-21  84

    /** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */ class Solution { public int rob(TreeNode root) { //计算当前节点偷与不偷所能获得收益,结果存在数组result中 int[] result = countSum(root); //根据题意可知需取其中最大的 return Math.max(result[0],result[1]); } public int[] countSum(TreeNode root){ int[] result = new int[2]; //如果当前节点为空节点,则其结果为0 if(root == null){ return result; } //计算当前节点左儿子偷与不偷所能获得的收益 int[] left = countSum(root.left); //计算当前节点右儿子偷与不偷所能获得的收益 int[] right = countSum(root.right); //不偷当前节点所能获得的最大收益 = 左儿子所能获得的最大收益 + 右儿子所能获得的最大收益 //0代表偷,1代表不偷 result[0] = Math.max(left[0],left[1])+Math.max(right[0],right[1]); //偷当前节点所能获得的最大收益= 偷当前节点的钱 + 不偷左儿子所获得的钱 +不偷右儿子所获得的钱 result[1] = root.val+left[0]+right[0]; return result; } }

     

    Processed: 0.009, SQL: 9