Binary Tree Maximum Path Sum
Question (LC.124)
Example
I: [1,2,3,4,5,6,7]
O: 1+2+3+4+5+6+7=18
I: [2,-25,4,10,20,5,6,7,11]
O: 7+10+11=28
I: []
O: -INFApproach
Code
static final int NNF = Integer.MIN_VALUE;
private class PathType {
int pathMax;
int connectMax;
public PathType(int path, int connect) {
pathMax = path;
connectMax = connect;
}
}
public int maxPathSum(TreeNode root) {
return pathHelper(root).connectMax;
}
private PathType pathHelper(TreeNode root) {
// base case
if (root == null) {
return new PathType(NNF, NNF);
}
// divide
PathType left = pathHelper(root.left);
PathType right = pathHelper(root.right);
// merge
// 3 cases connect left, connect right, connect neither
int pathMax = Math.max(Math.max(left.pathMax, right.pathMax), 0) + root.val;
// 4 cases connect both, connect only left, connect only right, connect neither (null case)
int localMax = Math.max(left.pathMax, 0) + // 0 to cut that branch off
root.val +
Math.max(right.pathMax, 0);
// we always want to pass along the current pathMax
// but for connectMax, we want to pass along the greatest
int connectMax = Math.max(localMax, Math.max(left.connectMax, right.connectMax));
return new PathType(pathMax, connectMax);
}Time Complexity
Last updated