Given a binary tree, find the maximum path sum.
The path may start and end at any node in the tree.
For example:
Given the below binary tree,
1
/ \
2 3
Return 6.
如果这个作为root,那么最长路应该就是F(left) + F(right) + val.当然如果left,或者right<0就不用加了
int max = Integer.MIN_VALUE;
public int maxPathSum(TreeNode root) {
if(root == null)
return 0;
maxSum(root);
return max;
}
private int maxSum(TreeNode root){
if(root == null) return 0;
int value = root.val;
int lmax = 0;
int rmax = 0;
if(root.left !=null){
lmax = maxSum(root.left);
if(lmax > 0){
value +=lmax;
}
}
if(root.right != null){
rmax = maxSum(root.right);
if(rmax > 0){
value +=rmax;
}
}
if(value > max){
max = value;
}
return Math.max(root.val, Math.max(root.val+lmax, root.val+rmax));
}