我们先定义一个全局变量res=flaot("-inf")来存储全局的最大值,也就是我们需要返回的值
对于节点值为20的节点,我们考虑的是对于以这个节点为根节点的路径的最大值是多少
我们有这么几种几种情况:
1.根节点自己就是最大的,不需要加上左右子树的路径
2.根节点加上左子树的最大路径是最大
3.根节点加上右子树的最大路径是最大的
4.根节点加上左右子树的最大路径是最大的
我们每次判断下这几个变量的最大值,就是以当前节点为根节点的路径的最大值
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution:
def maxPathSum(self, root: TreeNode) -> int:
res = float('-inf')
def dfs(root):
nonlocal res
if not root:
return float('-inf')
left_max = dfs(root.left)
right_max = dfs(root.right)
res = max(res, left_max+root.val, right_max+root.val, right_max+left_max+root.val, root.val)
return max(root.val, root.val+left_max, root.val+right_max)
dfs(root)
return res