1. 问题背景与核心思路
这道题目是二叉树遍历与递归算法的经典结合。给定一个二叉树和一个目标值,我们需要找出所有从根节点到叶子节点的路径,使得路径上节点值的和等于目标值。这看似简单的问题背后,实际上考察了开发者对递归思想的理解深度,以及对二叉树遍历的掌握程度。
在二叉树问题中,递归解法往往是最直观的选择。因为二叉树本身就是递归定义的数据结构——每个节点最多有两个子节点,左右子树也都是二叉树。这种自相似的特性让递归成为处理二叉树问题的天然工具。
提示:虽然递归解法简洁优雅,但在实际面试中,面试官通常会追问非递归解法(迭代法)的实现,以及两种方法的时间/空间复杂度分析。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 递归解法详细拆解
2.1 基础递归框架
我们先从最基本的递归框架开始构建解法。递归函数需要以下几个关键要素:
- 当前节点(用于访问节点值)
- 当前路径(记录已经走过的节点)
- 剩余目标值(初始为目标值,逐步减去节点值)
python复制def findPath(root, target):
res = [] # 存储所有符合条件的路径
path = [] # 记录当前路径
def dfs(node, target):
if not node:
return
path.append(node.val) # 将当前节点加入路径
target -= node.val # 更新剩余目标值
if not node.left and not node.right and target == 0:
res.append(path.copy()) # 找到符合条件的路径
dfs(node.left, target) # 递归左子树
dfs(node.right, target) # 递归右子树
path.pop() # 回溯,移除当前节点
dfs(root, target)
return res
2.2 关键点解析
- **
