您的位置:首页 > 其它

Binary Tree Maximum Path Sum

2015-10-17 10:26 267 查看
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 does not need to go through the root.

For example:

Given the below binary tree,

1
/ \
2   3


Return 6

思路: 题目的意思是求二叉树中任意两点间路径的最大的和。对于任意一个结点,求经过该结点的路径的最大值怎么求呢? 对于当前结点,求出该结点左边的一条最大的路径和l,以及该结点右边的一条最大的路径和r,如果l大于0就加上左边的这条路径,如果r大于0也加上右边的这条路径,如果l和r都小于0,经过当前结点的最大的路径就是当前结点的值。

遍历每个结点的过程中,都可以求出经历当前结点的路径的最大的值,可以用一个变量maxLVR来更新最大的,当所有的结点遍历完毕,maxLR的值就是所求的任意两个结点的之间路径的最大值。

public class Solution {
//用一个变量maxLVR来记录整个过程中的当前最大路径的和
int maxLVR=Integer.MIN_VALUE;
public int maxPathSum(TreeNode root) {
if(root==null) return 0;
maxPath(root);
return maxLVR;
}
//其实maxPath这个函数所求的是从root结点开始往下走的,
//可以走左边,也可以走右边的一条最大的路径
public int  maxPath(TreeNode root)
{
if(root==null) return 0;
//对于当前root结点,求出root.left结点开始往下走的最大路径的和
int l=maxPath(root.left);
//求root.right结点开始往下走的一条最大路径的和
int r=maxPath(root.right);
int sum=root.val;
//对于root结点,如果左子树的最大路径和大于0,可以带上左子树那一条最大路径
if(l>0) sum+=l;
//如果右子树的最大路径和大于0,也可以带上右子树那一边的最大路径
if(r>0) sum+=r;
//这样的话,经过当前结点的最大的路径和也就求出来了,为sum,如果sum比maxLVR还要大
//就更新maxLVR的值为sum
if(sum>maxLVR)  maxLVR=sum;
//返回的是以root结点往下走的一条路径,可以走左边也可以走右边,也可以就只是在root结点处
return Math.max(root.val,Math.max(root.val+l,root.val+r));
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: