面试150 二叉树中的最大路径和
思路
采用自底向上的递归方式(后序遍历)计算二叉树中的最大路径和。对于每个节点,递归地求出其左右子树可以提供的最大贡献值(若为负则置为0),然后以该节点为“路径的最高点”计算一次完整路径的和,并尝试更新全局最大路径和。每次递归返回当前节点向上可延续的最大单边路径,用于父节点的计算。通过这种方式,能全面考虑所有路径组合,最终得到整棵树中任意路径的最大和。
# 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:self.maxSum=float('-inf')def spread(root):if not root:return 0left_sum=max(spread(root.left),0)right_sum=max(spread(root.right),0)this_sum=root.val+left_sum+right_sumself.maxSum=max(self.maxSum,this_sum)return root.val+max(left_sum,right_sum)spread(root)return self.maxSum