# 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: Optional[TreeNode]) -> int:
result =root.val
def dfs(root ,res):
if root is None :
return 0
lmax=max(dfs(root.left,res),0)
rmax=max(dfs(root.right,res),0)
nonlocal result
result=max(result, lmax+rmax+root.val)
return max(lmax,rmax)+root.val
dfs(root,result)
return result
# 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 maxPathSum0(self, root: Optional[TreeNode]) -> int:
result =float('-inf')
def dfs(root ,res): # res是多余的,root是一个变化的node,不会一直是初始的root
if root is None :
return 0
lmax=max(dfs(root.left,res),0)
rmax=max(dfs(root.right,res),0)
nonlocal result
#以当前节点 (root) 作为路径的“最高点”或“转折点”:
result=max(result, lmax+rmax+root.val)#如果是根节点,直接返最大值
#返回以当前 node 为起点,向下的最大路径和给父节点
return max(lmax,rmax)+root.val #如果这个节点是子节点,传递给上一个父节点时候,得返回它的自己值和它下面左右最大的一个分支的值
dfs(root,result)
return result
def maxPathSum(self, root: Optional[TreeNode]) -> int:
# 使用负无穷大初始化,更安全
result = float('-inf')
# dfs 函数不再需要 res 参数
def dfs(node) -> int:
nonlocal result
if node is None:
return 0
# 递归计算左右子树贡献(负数贡献视为 0)
# 移除 res 参数
lmax = max(dfs(node.left), 0)
rmax = max(dfs(node.right), 0)
# 计算经过当前节点的路径和,并更新全局 result
# 使用 nonlocal result 进行比较
current_path_sum = lmax + rmax + node.val
result = max(result, current_path_sum)
# 返回以当前节点为根向下的最大路径和
return max(lmax, rmax) + node.val
# 初始调用 dfs,不再传递 result
dfs(root)
return result