1 /**
2 * Definition for binary tree
3 * public class TreeNode {
4 * int val;
5 * TreeNode left;
6 * TreeNode right;
7 * TreeNode(int x) { val = x; }
8 * }
9 */
10 public class Solution {
11 public int maxPathSum(TreeNode root) {
12 ArrayList<Integer> maxSum = new ArrayList<Integer>(1);
13 maxSum.add(Integer.MIN_VALUE);
14 getMaxSum(root,maxSum);
15 return maxSum.get(0);
16 }
17
18 public int getMaxSum(TreeNode root,ArrayList<Integer> maxSum){
19 if(root==null){
20 return 0;
21 }
22
23 int leftSum=0,rightSum=0;
24 leftSum = getMaxSum(root.left,maxSum);
25 rightSum = getMaxSum(root.right,maxSum);
26
27 int curSum = Math.max(root.val,Math.max(root.val+leftSum,root.val+rightSum));
28 maxSum.add(0,Math.max(maxSum.get(0), Math.max(curSum,root.val+leftSum+rightSum)));
29 return curSum;
30 }
31 }