1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41
| class Solution { public int maxValue(TreeNode root, int k) { int[] dp = getDp(root, k);
int ans = Integer.MIN_VALUE; for (int i = 0; i < dp.length; i++) { ans = Math.max(ans, dp[i]); } return ans; }
private int[] getDp(TreeNode root, int k) { int[] dp = new int[k + 1]; if (root == null) { return dp; }
int[] leftDp = getDp(root.left, k); int[] rightDp = getDp(root.right, k);
int leftMax = Integer.MIN_VALUE, rightMax = Integer.MIN_VALUE; for (int i = 0; i <= k; i++) { leftMax = Math.max(leftMax, leftDp[i]); rightMax = Math.max(rightMax, rightDp[i]); } dp[0] = leftMax + rightMax;
for (int i = 1; i < dp.length; i++) { for (int leftCount = 0; leftCount < i; leftCount++) { int rightCount = i - leftCount - 1; dp[i] = Math.max(dp[i], leftDp[leftCount] + root.val + rightDp[rightCount]); } }
return dp; } }
|