题目内容:
给定一个非空二叉树,返回其最大路径和。
本题中,路径被定义为一条从树中任意节点出发,沿父节点-子节点连接,达到任意节点的序列。该路径至少包含一个节点,且不一定经过根节点。
示例 1:
输入:[1,2,3]
1
/ \
2 3
输出:6
示例 2:
输入:[-10,9,20,null,null,15,7]
-10
/ \
9 20
/ \
15 7
输出:42
如下代码1:AC代码
根据题意,是要找一条路径,使得整条路径是所有路径的最大值。 注意,这个路径不是必须从根节点出发,也不是只能向下,就是图中的任意一条路。故可以参考树的后序遍历来维护每一个子数的根节点的最大路径值。
代码1:
class Solution:
ans = -1000000000000000000000
def maxPathSum(self, root: TreeNode) -> int:
def dfs(root):
if(not root): return 0
left = dfs(root.left)
right = dfs(root.right)
if not root.left: left = 0
if not root.right: right = 0
self.ans = max(self.ans, root.val, root.val + left, root.val+right, root.val + left + right)
root.val = max(root.val, root.val + left, root.val+right)
return root.val
dfs(root)
return self.ans