/**
* Definition for binary tree
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
public class Solution {
private int maxSum = Integer.MIN_VALUE;
public int maxPathSum(TreeNode root) {
maxSum = Integer.MIN_VALUE;
findMaxPathSum(root);
return maxSum;
}
private int findMaxPathSum(TreeNode node) {
if (node == null) {
return Integer.MIN_VALUE;
}
int result = node.val;
int l = Math.max(findMaxPathSum(node.left), 0);
int r = Math.max(findMaxPathSum(node.right), 0);
result += Math.max(l, r);
int possible = node.val + l + r;
if (possible > maxSum) {
maxSum = possible;
}
return result;
}
}
* Definition for binary tree
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
public class Solution {
private int maxSum = Integer.MIN_VALUE;
public int maxPathSum(TreeNode root) {
maxSum = Integer.MIN_VALUE;
findMaxPathSum(root);
return maxSum;
}
private int findMaxPathSum(TreeNode node) {
if (node == null) {
return Integer.MIN_VALUE;
}
int result = node.val;
int l = Math.max(findMaxPathSum(node.left), 0);
int r = Math.max(findMaxPathSum(node.right), 0);
result += Math.max(l, r);
int possible = node.val + l + r;
if (possible > maxSum) {
maxSum = possible;
}
return result;
}
}