Maximum Path Sum Binary Tree I
public class Solution {
public int maxPathSum(TreeNode root) {
int[] max = new int[]{Integer.MIN_VALUE};
helper(root, max);
return max[0];
}
private int helper(TreeNode root, int[] max){
if (root == null){
return 0;
}
if (root.right == null && root.left == null) {
return root.key;
} else if (root.right == null) {
return helper(root.left, max) + root.key;
} else if (root.left == null) {
return helper(root.right, max) + root.key;
} else {
//case 4
// from children
// get best partial paths from left and right
int bestLPath = helper(root.left, max);
int bestRPath = helper(root.right, max);
// at current
// compare completeLocalPath to global maximum path
int completeLocalPath = bestLPath + root.key + bestRPath;
max[0] = Math.max(max[0], completeLocalPath);
// to parent
// pass up best partial path
return Math.max(bestLPath, bestRPath) + root.key;
}
}
}
Last updated