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
.
有一个地方要注意,如果left>0 && right>0,这时候的return value不能为(left+right+root.val),因为这样一来就不是一条single path了,必须取max(left,right)+root.val来返回
int max = Integer.MIN_VALUE;
public int maxPathSum(TreeNode root) {
// IMPORTANT: Please reset any member data you declared, as
// the same Solution instance will be reused for each test case.
return Math.max(maxHelper(root),max);
}
public int maxHelper(TreeNode root){
if(root==null)
return 0;
int sum=0, returnVal =0;
int left = maxHelper(root.left);
int right = maxHelper(root.right);
if(left>0 && right>0){
sum = left+right+root.val;
returnVal = Math.max(left,right)+root.val;
}
else if(left<0 && right<0){
sum = root.val;
returnVal=root.val;
}
else{
sum = Math.max(left,right)+root.val;
returnVal = Math.max(left,right)+root.val;
}
max = Math.max(max,sum);
return returnVal;
}