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,
public class Solution {
int result=Integer.MIN_VALUE;
public int maxPathSum(TreeNode root) {
maxValue(root);
return result;
}
public int maxValue(TreeNode root){
if(root==null)return 0;
int left=Math.max(maxValue(root.left),0);
int right=Math.max(maxValue(root.right),0);
result=Math.max(left+right+root.val,result);
return root.val+Math.max(left,right);
}
}
Some idea:
The most important idea used in the tree problem is the idea of recursive.
1 For this problem: first analyze the structure needed for the problem. has to start from the root node. the maximum path sum if the root value is contained has to be max of the left, right plus the value of the root value; if any of the value is larger than 0 , then the value should be added.
so need to compare with 0;(this idea should be memorized)
2 maintain the maxvalue variable and update along the way.
3 one thing to notice is that the return value and the max value we maintained is not the same.