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 解题报告

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

2. 二叉树系列 - 二叉树里的最长路径 例 [LeetCode] Binary Tree Maximum Path Sum

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

3. [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. ...

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

5. C++ leetcode Binary Tree Maximum Path Sum

偶然在面试题里面看到这个题所以就在Leetcode上找了一下,不过Leetcode上的比较简单一点. 题目: Given a binary tree, find the maximum path su ...

6. [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. ...

7. [leetcode]Binary Tree Maximum Path Sum @ Python

原题地址:https://oj.leetcode.com/problems/binary-tree-maximum-path-sum/ 题意: Given a binary tree, find th ...

8. [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. ...

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

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

## 随机推荐

1. asp.net core 如何在Controller获取配置文件的值

场景:我们会把一些配置信息,写在配置文件文件中,便于我们修改和配置.在之前的asp.net 中可以通过ConfigurationManger来获取web.config里面的配置.在.net core ...

2. setTimeout()与setInterval()

一.setTimeout与setInterval的用法(http://www.css88.com/archives/5804) setTimeout是超时调用,javascript是一个单线程的解析器 ...

3. mysql查看和修改最大数量

通常,mysql的最大连接数默认是100, 最大可以达到16384.1.查看最大连接数:show variables like '%max_connections%';2.修改最大连接数方法一:修改配 ...

4. VS一般设置（字体，背景色）

字体 打开工具=>环境=>字体和颜色,字体:Consolas,大小:13 背景色 缩进设置 工具=>文本编辑器=>纯文本=>制表符=>保留制表符

5. Camel routes in Spring config file

The normal spring bean definition configuration file, the xsi:schemaLocation only has two: beans and ...

6. jquery冒泡及阻止

javascript, jquery的事件中都存在事件冒泡和事件捕获的问题,下面将两种问题及其解决方案做详细总结. 事件冒泡是一个从子节点向祖先节点冒泡的过程: 事件捕获刚好相反,是从祖先节点到子节点 ...

7. PARTITION(number theory) ALSO Explosive number in codewars

问题出于codewars,简言之:寻找和为一个整数的的不同整数组合.https://en.wikipedia.org/wiki/Partition_(number_theory) 例如:和为6的整数组 ...

8. 新概念英语（1-71）He&#39;s awful！

He's awful!How did Pauline answer the telephone at the nine o'clock?A:What's Ron Marston like, Pauli ...

9. SpringCloud学习笔记：服务注册与发现Eureka（2）

1. Eureka简介 Eureka是一个用于服务注册和发现的组件,分为Eureka Server和Eureka Client,Eureka Server为Eureka服务注册中心,Eureka Cl ...

10. 安装vue-cli时-4058报错的解决方法

一.报错信息 安装vue-cli时-4058报错 二.解决办法 1.安装淘宝镜像 npm --registry https://registry.npm.taobao.org info undersc ...