124二叉树中的最大路径和

# 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 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值