Given a non-empty 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.

Example 1:

Input: [1,2,3]

       1
/ \
2 3 Output: 6

Example 2:

Input: [-10,9,20,null,null,15,7]

   -10
   / \
  9  20
    /  \
   15   7 Output: 42 这个题目的思路就是用DFS, 然后我们建一个helper function(input: root, 得到从这个root出发的一条path s.t path sum 最大), 得到包括root的最大的path sum,
然后recursive 去看是否包括root.left path sum 和root.right path sum, 这里需要
注意的是, 返回的时候因为是path, 所以left和right只能选一边, 只是self.ans 可以考虑left + right+ root.最后返回self.ans 04/18/2019 update
可以一步一步的来看, 第一步, 考虑 root -> leaf 的maximum sum,利用Divide and conquer
class Solution:
def maxSum(self, root):
if not root: return 0
left = self.maxSum(root.left)
right = self.maxSum(root.right)
return root.val + max(left, right)

第二步, 考虑 root -> any node 的maximum sum, 实际上就是基于root -> leaf的情况下,加入了如果children 的maximum sum 是负数的情况,那么就不要加入children的maximum sum。

class Solution:
def maxSum(self, root):
if not root: return 0
left = self.maxSum(root.left)
right = self.maxSum(root.right)
return root.val + max(0, left, right)

最后考虑any node -> any node的情况, 就可以每个node, 都判断以该点作为root的maximum sum,也就是上面的第二步,只不过设置一个全局变量去将所有点的maximum sum,以及该点加上左,右之后的sum,取最大值,就是我们要的结果。


1. Constraints
1) empty => 0 update:题目说了non-empty,所以不会有。 2. Ideas
DFS T: O(n) S: O(n) 3. Code
 class Solution:
def maxSumPath(self, root):
self.ans = None
def rootSum(root):
if not root: return 0
left, right = rootSum(root.left), rootSum(root.right)
localSum = max(root.val, root.val + left, root.val + right)
potentialSum = max(localSum , root.val + left + right)
if self.ans == None or potentialSum > self.ans:
self.ans = potentialSum
return localSum
if not root: return 0 # since it is non-empty tree, so this is useless
rootSum(root)
return self.ans

4. Test cases

1) empty => 0 , leetcode上面好像这里返回的是Min_value, 一个最小负数, 我觉得应该是0, 不过test cases里面没有加, 所以无所谓  update:题目说了non-empty,所以不会有。

2) -1

3)

   -10
   / \
  9  20
    /  \
   15   7

[LeetCode] 124. Binary Tree Maximum Path Sum_ Hard tag: DFS recursive, Divide and conquer的更多相关文章

  1. leetcode 124. Binary Tree Maximum Path Sum 、543. Diameter of Binary Tree(直径)

    124. Binary Tree Maximum Path Sum https://www.cnblogs.com/grandyang/p/4280120.html 如果你要计算加上当前节点的最大pa ...

  2. 第四周 Leetcode 124. Binary Tree Maximum Path Sum (HARD)

    124. Binary Tree Maximum Path Sum 题意:给定一个二叉树,每个节点有一个权值,寻找任意一个路径,使得权值和最大,只需返回权值和. 思路:对于每一个节点 首先考虑以这个节 ...

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

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

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

  5. [leetcode]124. Binary Tree Maximum Path Sum二叉树最大路径和

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

  6. LeetCode 124. Binary Tree Maximum Path Sum 二叉树中的最大路径和 (C++/Java)

    题目: Given a non-empty binary tree, find the maximum path sum. For this problem, a path is defined as ...

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

  8. leetcode 124. Binary Tree Maximum Path Sum ----- java

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

  9. Java for LeetCode 124 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. ...

随机推荐

  1. python3 的 mysql 简单操作

    一.python 提供的 db 接口 pymysql 两个基本对象: connection.cursor 连接示例 # connect_demo.py import pymysql db = pymy ...

  2. Docker多主机网络

    网络术语概念 二层交换技术:工作在OSI七层网络模型的第二层,通过MAC地址进行帧转发 三层交换技术:也称为IP交换技术,工作在OSI七层网络模型的第三层,通过IP地址进行包转发.它解决了局域网中网段 ...

  3. Unable to cast object of type 'System.Int32' to type 'System.Array'.

    x 入职了新公司.最近比较忙...一看博客...更新频率明显少了...罪过罪过... 新公司用ASP.NET MVC 遇上一个错误: Unable to cast object of type 'Sy ...

  4. ubuntu16.04下安装配置pl-svo

    Semi-direct Visual Odometry(SVO)安装配置 https://blog.csdn.net/seymour163/article/details/53947764 http: ...

  5. 用pymysql操作MySQL数据库

    工具库安装 pip install pymysql 连接关闭数据库与增删改查操作 # 导入pymysql库 import pymysql # 打开数据库连接 # 参数1:数据库服务器所在的主机+端口号 ...

  6. C和C指针小记(七)-整型变量范围

    1.变量范围 limits.h 头文件中定义来C 语言的变量范围. 变量范围的限制 //char 的范围 printf("CHAR_BIT:%d CHAR_MIN:%d CHAR_MAX:% ...

  7. listview控件专题

    listview控件加CheckBox 窗口load: listViewLayersName.AutoResizeColumns(ColumnHeaderAutoResizeStyle.HeaderS ...

  8. Mysql 性能优化教程

    Mysql 性能优化教程 目录 目录 1 背景及目标 2 Mysql 执行优化 2 认识数据索引 2 为什么使用数据索引能提高效率 2 如何理解数据索引的结构 2 优化实战范例 3 认识影响结果集 4 ...

  9. [hyperscan][pkg-config] hyperscan 从0到1路线图

    经过一系列的研究学习,知识储备之后,终于,可以开始研究hyperscan了. [knowledge][模式匹配] 字符匹配/模式匹配 正则表达式 自动机 [knowledge][perl][pcre] ...

  10. 第一版STM32PCB的问题

    1.5与6引脚连在一起了 2.有3个插排隔得太近,导致传感器安装不了 3.开关不匹配,画PCB时可以考虑一下实验室有哪些东西 4.可以用开关代替跳冒 5.AM3.3电路电容 6.钽电容的正负极区分 有 ...