原题链接在这里:https://leetcode.com/problems/binary-tree-maximum-path-sum/
maxVal中包含着最后要返回的结果。
helper函数是求当前root往下的最大路径,先算左边路径,返回值直接和0比较,若不是正数就返回0,然后同样方法算右边路径。
当前最深路径看当前root的val加上左边或者右边,哪个大,helper函数返回大的那个。
同时更新maxVal, 看看当前root的val同时加上左边和右边有没有比现有的maxVal包含值大。
AC Java:
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
public class Solution {
public int maxPathSum(TreeNode root) {
int [] maxValue = new int[1];
maxValue[0] = Integer.MIN_VALUE;
helper(root,maxValue);
return maxValue[0];
}
//此函数返回root往下最大路径
private int helper(TreeNode root, int [] maxVal){
if(root == null){
return 0;
}
//leftMax, rightMax could be 0 or positive
int leftMax = Math.max(0,helper(root.left, maxVal));
int rightMax = Math.max(0,helper(root.right,maxVal));
//当前root往下的最大路径
int curMaxDeepth = Math.max(root.val + leftMax, root.val + rightMax);
//Update maxVal
maxVal[0] = Math.max(maxVal[0], leftMax+root.val+rightMax);
return curMaxDeepth;
}
}