原题地址:https://oj.leetcode.com/problems/binary-tree-maximum-path-sum/
This is more complicate that previous question.
There will be four different possible scenarios for maximum path.
- Node only
- Node and L-sub
- Node and R-sub
- Node+ L-sub + R-sub
We need to keep tracing all, and return the one with max value.
/**
* Definition for binary tree
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
public class Solution {
public int maxPathSum(TreeNode root) {
int[] res = new int[1];
res[0] = Integer.MIN_VALUE;
maxPath(root,res);
return res[0];
}
public int maxPath(TreeNode root, int[] res){
if(root == null){
return 0;
}
int left = maxPath(root.left,res);
int right = maxPath(root.right,res);
int all = left+right+root.val;
int single = Math.max(root.val, Math.max(left,right)+root.val);
res[0] = Math.max(res[0],Math.max(all,single));
return single;
}
}