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,
Return 6
思路: 题目的意思是求二叉树中任意两点间路径的最大的和。对于任意一个结点,求经过该结点的路径的最大值怎么求呢? 对于当前结点,求出该结点左边的一条最大的路径和l,以及该结点右边的一条最大的路径和r,如果l大于0就加上左边的这条路径,如果r大于0也加上右边的这条路径,如果l和r都小于0,经过当前结点的最大的路径就是当前结点的值。
遍历每个结点的过程中,都可以求出经历当前结点的路径的最大的值,可以用一个变量maxLVR来更新最大的,当所有的结点遍历完毕,maxLR的值就是所求的任意两个结点的之间路径的最大值。
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)); } }
相关文章推荐
- nginx 配置文件
- 软件测试
- Cocos2d-x能够实现的效果总结
- 有意思的时钟
- http 中get post put delete
- 搭建流水线
- ASP.NET MVC4中使用bootstrip模态框时弹不出的问题
- 浅析Date与Java 时间戳相互转换
- spring三种数据源方式
- VS2008 SP1开发环境补丁列表
- C++中delete和delete[]的区别 http://www.cnblogs.com/charley_yang/archive/2010/12/08/1899982.html
- 感恩篇
- 从视频文件中读入数据-->将数据转换为灰度图-->对图像做canny边缘检测-->将这三个结构显示在一个图像中
- 网站发的文章有收录 但是没有排名怎么处理
- c# 计时器的三种使用方法
- vim集成开发环境搭建之ctags配置使用
- Cocos2d-x实现用户触摸的功能
- 写给来到这里的每一位
- Angularjs $scope 里面的$apply方法 和 $watch方法
- linux公社 u-boot下载