Get maximum sum of path cost from any node to any node(not necessary from leaf to leaf)
key point:
discard the left subtree path if left subtree path sum < 0
discard the right subtree path if right subtree path sum < 0
globalmax = max(globalMax, root.key + left + right)
the value that need to return to the upper level is root.key + max(left,right) ( must include root, need to include at least one node in this path, otherwise it happens not including any node in the path)
/**
* public class TreeNode {
* public int key;
* public TreeNode left;
* public TreeNode right;
* public TreeNode(int key) {
* this.key = key;
* }
* }
*/
public class Solution {
public int maxPathSum(TreeNode root) {
// Write your solution here.
int[] globalMax = {Integer.MIN_VALUE};
pathSum(root,globalMax\);
return globalMax[0];
}
public int pathSum (TreeNode root,int[] globalMax) {
if (root == null) {
return 0;
}
// base case
int left = pathSum(root.left,globalMax);
int right = pathSum(root.right,globalMax);
if (root.left != null && root.right != null) {
globalMax[0] = Math.max(globalMax[0],left + right + root.key\);
return Math.max(left,right) + root.key;
}
return root.left == null ? right + root.key : left + root.key;
}
}