6 / \ 3 10 / \ / \ 1 4 7 8 Maximum path sum 25 - [7,10,8]The trick to solve the problem is to do bottom up approach.
A recursive method maxPathDown(TreeNode node)
(1) computes the maximum path sum with highest node is the input node, update maximum if necessary.
(2) returns the maximum sum of the path that can be extended to input node's parent.
public class MaxPathSum {
int maxValue = 0;
public int maxPathSum(TreeNode root) {
maxValue = Integer.MIN_VALUE;
maxPathDown(root);
return maxValue;
}
private int maxPathDown(TreeNode node) {
if (node == null) return 0;
int left = Math.max(0, maxPathDown(node.left));
int right = Math.max(0, maxPathDown(node.right));
maxValue = Math.max(maxValue, left + right + node.val);
return Math.max(left, right) + node.val;
}
class TreeNode {
int val;
TreeNode left;
TreeNode right;
TreeNode(int x) {
val = x;
}
}
}