1. 问题背景与核心挑战
遇到二叉树相关算法题时,路径和问题总是高频考点。LeetCode第124题要求找出二叉树中任意节点到任意节点的路径,使得路径上节点值之和最大。这个看似简单的需求背后隐藏着几个关键难点:
- 路径方向不固定:可以从左子树经过根节点再到右子树,形成"拐弯"路径
- 节点值可能为负:需要谨慎处理负值节点对路径和的拖累
- 全局最优与局部最优的平衡:每个子树需要向上返回它对父节点的"贡献值",同时维护全局最大值
我在第一次做这道题时,花了整整两小时才理清递归过程中的状态传递逻辑。后来在面试中多次遇到同类问题,逐渐总结出一套清晰的解题框架。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 递归解法核心思路
2.1 递归函数的设计要点
递归函数需要完成两个任务:
- 计算以当前节点为根的子树的单边最大路径和(可向上传递的贡献值)
- 维护经过当前节点的完整路径最大值(可能包含左右子树)
python复制def maxPathSum(root):
self.max_sum = float('-inf')
def dfs(node):
if not node:
return 0
# 获取左右子树的单边最大贡献值
left_gain = max(dfs(node.left), 0)
right_gain = max(dfs(node.right), 0)
# 当前节点作为转折点的完整路径和
price_newpath = node.val + left_gain + right_gain
# 更新全局最大值
self.max_sum = max(self.max_sum, price_newpath)
# 返回当前节点的单边最大贡献值
return node.val + max(left_gain, right_gain)
dfs(root)
return self.max_sum
2.2 关键步骤解析
- 处理空节点:递归基
