Binary Tree Maximum Path Sum

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`.

maxPathSum（root）跟maxPathSum(root.left)和maxPathSum(root.right)之间的关系：

root左子树的maxPath，右子树的maxPath以及根节点之间无法建立直接递归关系。也就是说以下的递推式不成立:

maxPathSum(root) = max{ maxPathSum(root.left), maxPathSum(root.right), maxPathSum(root.left) + maxPathSum(root.right) + root.val }

maxPathSum(root) = F( maxPathSum(root.left), maxPathSum(root.right), root )

F( maxPathSum(root.left), maxPathSum(root.right), root )

/ max{maxPathSum(root.left), maxPathSum(root.right)},                                                                   if root 将不包含在最长路径中

=  {

\ max{maxPathSum(root.left), maxPathSum(root.right)， max path sum of the path includes root},    if root 将包含在最长路径中

1）包含节点在内的最长路径（只可能跟该节点的左子树或者右子树相关）；

2）该节点作为根节点的子树的最长路径和；

```class max_val {
int max_path_include_root_half_tree; // 辅助值
int max_path_sum; // 待求解值

public void set(int x) {
max_path_include_root_half_tree = max_path_sum = x;
}
}
```

```private void maxPathSum(TreeNode root, max_val max_vs) {
if (root == null) {
max_vs.set(-2147483647 >> 2);
return;
}

if (root.left == null && root.right == null) {
max_vs.set(root.val);
return;
}

max_val left_ = new max_val();
maxPathSum(root.left, left_);

max_val right_ = new max_val();
maxPathSum(root.right, right_);

int a = left_.max_path_include_root_half_tree + root.val;
int b = right_.max_path_include_root_half_tree + root.val;
int c = root.val;//a,b,c中包含root的值，并且最多包含了左子树或者右子树，这类路径可用于组成包含父节点的路径
int d = a + right_.max_path_include_root_half_tree;
int f = left_.max_path_sum;
int g = right_.max_path_sum;

max_vs.max_path_include_root_half_tree = max(new int[] { a, b, c });// 包含root的最长路径

max_vs.max_path_sum = max(new int[] { a, b, c, d, f, g });// root作为根节点的树的最长路径和

}
```

```	public int maxPathSum(TreeNode root) {
// Start typing your Java solution below
// DO NOT write main() function
max_val mv_l = new max_val();
maxPathSum(root, mv_l);

return mv_l.max_path_sum;
}
```

## [leetcode]Binary Tree Maximum Path Sum的更多相关文章

1. [LeetCode] Binary Tree Maximum Path Sum 求二叉树的最大路径和

Given a binary tree, find the maximum path sum. The path may start and end at any node in the tree. ...

2. leetcode&ndash;Binary Tree Maximum Path Sum

1.题目说明 Given a binary tree, find the maximum path sum.   The path may start and end at any node in t ...

3. LeetCode Binary Tree Maximum Path Sum 二叉树最大路径和（DFS）

题意:给一棵二叉树,要求找出任意两个节点(也可以只是一个点)的最大路径和,至少1个节点,返回路径和.(点权有负的.) 思路:DFS解决,返回值是,经过从某后代节点上来到当前节点且路径和最大的值.要注意 ...

4. 【leetcode】Binary Tree Maximum Path Sum

Binary Tree Maximum Path Sum Given a binary tree, find the maximum path sum. The path may start and ...

5. 26. Binary Tree Maximum Path Sum

Binary Tree Maximum Path Sum Given a binary tree, find the maximum path sum. The path may start and ...

6. 【LeetCode OJ】Binary Tree Maximum Path Sum

Problem Link: http://oj.leetcode.com/problems/binary-tree-maximum-path-sum/ For any path P in a bina ...

7. leetcode@ [124] Binary Tree Maximum Path Sum (DFS)

https://leetcode.com/problems/binary-tree-maximum-path-sum/ Given a binary tree, find the maximum pa ...

8. LeetCode（124） Binary Tree Maximum Path Sum

题目 Given a binary tree, find the maximum path sum. For this problem, a path is defined as any sequen ...

9. leetcode 124. Binary Tree Maximum Path Sum

Given a binary tree, find the maximum path sum. For this problem, a path is defined as any sequence ...

## 随机推荐

1. 微信支付：H5吊起支付API，不显示&ldquo;确认支付、输入密码&rdquo;界面

使用公众号进行支付,官方开发帮助文档: https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=7_1 其业务流程如下: 按照业务流程进行开发 ...

2. 从零开始学 Java - 数据库连接池的选择 Druid

我先说说数据库连接 数据库大家都不陌生,从名字就能看出来它是「存放数据的仓库」,那我们怎么去「仓库」取东西呢?当然需要钥匙啦!这就是我们的数据库用户名.密码了,然后我们就可以打开门去任意的存取东西了. ...

3. C# 读取EXCEL文件的三种经典方法

1.方法一:采用OleDB读取EXCEL文件: 把EXCEL文件当做一个数据源来进行数据的读取操作,实例如下: public DataSet ExcelToDS(string Path) { stri ...

4. WordPress安装插件提示输入FTP账户信息

在WP后台安装插件时提示输入FTP账户信息,其实出现这个的问题的原因是Apache/Nginx的执行身份非文件属主身份. 如果你使用的是独立服务器或VPS,WordPress的安装目录为 /home/ ...

5. Windows 2008 R2 安装 Windows phone 7 开发环境

安装环境:1.Windows server 2008 R22.Visual Studio 2010 SP1 旗舰版 1.下载 WP7 SDK 离线安装包.(话说要选择与 VS2010 相同语言的版本) ...

6. yii2 GridView常见操作

作者:白狼 出处:http://www.manks.top/article/yii2_gridview 本文版权归作者,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则 ...

7. 似魔鬼的 『 document.write 』

在平时的工作中,楼主很少用 document.write 方法,一直觉得 document.write 是个危险的方法.楼主不用,并不代表别人不用,最近给维护的项目添了一点代码,更加深了我对 &quo ...

8. 洛谷P1209 [USACO1.3]修理牛棚 Barn Repair

题目描述 在一个夜黑风高,下着暴风雨的夜晚,farmer John的牛棚的屋顶.门被吹飞了. 好在许多牛正在度假,所以牛棚没有住满. 牛棚一个紧挨着另一个被排成一行,牛就住在里面过夜. 有些牛棚里有牛 ...

9. C++中new的解说

new int;//开辟一个存放整数的存储空间,返回一个指向该存储空间的地址(即指针) new int(100);//开辟一个存放整数的空间,并指定该整数的初值为100,返回一个指向该存储空间的地址 ...

10. Eclipse引用Library失败的问题

整个导入流程严格按照guide的内容操作,但是始终无法导入,设置导入后项目中不出现相关的Library project.在设置完library之后重新打开始始终显示关联错误,就是reference那里 ...