124. Binary Tree Maximum Path Sum
# Hard, DFS
两个维度去分析这个问题
这个hard问题可以拆分成两个小问题:
自根节点往下,总和最大路径
左子树或右子树,总和最大路径
这是一个需要分而治之去解决的问题,需要知道哪些信息(如何分):
左边总和最大的路径,自根节点向下左边总和最大路径
右边总和最大的路径,自根节点向下右边总和最大路径
横跨左右包括root的最大路径
如何合并:以上三点,取最大路径
最重要是每次需要记录两个返回值。想像成每一个root要记录什么?记录自root下去总和最大路径,以及目前为止知道的总和最大路径
横跨root节点的总和最大路径怎么算?就是从左叶子下去最大路径+root+从右边叶子下去最大路径
迭代结束的终止条件:
if root=None,then return m = [0, float('-inf')]
m[0]
是root下去总和最大路径,m[1]
是目前为止知道的最大路径。
从根节点出发总和最大路径不仅需要比较左右向下的路径,还要与0比较,因为如果根节点以下全为负数,甚至可以不要根节点。
一定要会写test case,例如[-1], [-1, -2, -3], [1, 2].
Last updated
Was this helpful?