Given a binary tree, find the maximum path sum.
For this problem, a path is defined as any sequence of nodes from some starting node to any node in the tree along the parent-child connections. The path must contain at least one node and does not need to go through the root.
For example :
Given the below binary tree,
1
/ \
2 3
Return 6.
思路如下:
null
sum=2{ null
sum=1{
sum=3{null
null
分别把左右两颗子树的最大SUM求出来,采用递归的方法,然后再加上根结点的数值,同时这时候用maxSum来保存一条路径的最大SUM。代码如下:
private int maxSum=Integer.MIN_VALUE;
public int maxPathSum(TreeNode root) {//求一个节点到另一个节点的最长路径
MaxSum(root);
return maxSum;
}
private int MaxSum(TreeNode root) {
if(root==null) return 0;
int left=MaxSum(root.left);
int right=MaxSum(root.right);
int sum=root.val;
if(left>0) sum+=left;
if(right>0) sum+=right;
if(maxSum<sum) maxSum=sum;
return Math.max(left, right)>0?Math.max(left, right)+root.val:root.val;
}