1. 二叉树中的最大路径和问题解析
二叉树的最大路径和问题(LeetCode 124题)是一个经典的树形DP问题。这个问题的核心在于理解路径的定义和如何通过递归计算最大路径和。
1.1 问题理解与定义
首先我们需要明确什么是"路径":在二叉树中,路径是指从任意节点出发,沿着父子连接到达任意节点的序列。同一个节点在路径中最多只能出现一次。路径和是指路径上所有节点值的总和。
关键点在于:
- 路径不一定经过根节点
- 路径可以从任意节点开始,到任意节点结束
- 路径必须至少包含一个节点
1.2 解题思路分析
这个问题的解法采用后序遍历(左右根)的递归方式,原因在于:
- 我们需要先知道左右子树的信息才能计算当前节点的最大路径和
- 后序遍历天然符合这种"先子后父"的计算顺序
递归函数的设计需要考虑两个值:
- 当前子树能对外提供的最大路径和(即单边路径)
- 当前子树内部的最大路径和(可能包含左右子树)
1.3 代码实现详解
让我们深入分析给出的Python解法:
python复制class Solution:
def maxPathSum(self, root: Optional[TreeNode]) -> int:
ans = -inf # 初始化为负无穷,处理全负数情况
def dfs(node):
nonlocal ans
if node is None:
return 0
l_length = dfs(node.left) # 左子树能提供的最大路径和
r_length = dfs(node.right) # 右子树能提供的最大路径和
# 计算当前节点为根的最大路径和(可能包含左右子树)
ans = max(ans, l_length + r_length + node.val)
# 返回当前节点能对外提供的最大路径和(只能选一边)
return max(max(l_length,
