# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, val=0, left=None, right=None):
# self.val = val
# self.left = left
# self.right = right
class Solution:
def maxPathSum(self, root: TreeNode) -> int:
self.ans = float("-inf")
def func(root):
if not root: return 0
left = func(root.left)
right = func(root.right)
# 所包含路径的最大值(有可能为0),所以我们就每轮都比较并记录,self.maxsum与左子树与右子树的最大值加上当前节点的值val
self.ans = max(self.ans,left+right+root.val)
# 本题必须要借用返回值来在每一层递归中比较路径的大小,因为如果不将这个路径的大小随着函数返回的话,外部变量self.maxsum将会无法每一轮比较和更新。
return max(0,max(left,right)+root.val)
func(root)
return self.ans