LeetCode 113. 路径总和 II

题目描述

113. 路径总和 II

image-20230305213247376

image-20230305213252316

思路分析

  1. 递归遍历:使用深度优先搜索遍历二叉树,从根节点开始,逐层向下,直到叶子节点。
  2. 记录路径:在遍历过程中,记录当前路径上的节点值。
  3. 判断叶子节点:当到达叶子节点时,检查当前路径的和是否等于目标和。如果是,则将当前路径添加到结果中。
  4. 回溯:在返回上层节点时,移除当前节点,以便于探索其他路径。

参考代码

image-20250508010154811

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
func pathSum(root *TreeNode, targetSum int) [][]int {
	var res [][]int
	var path []int

	var dfs func(node *TreeNode, sum int)
	dfs = func(node *TreeNode, sum int) {
		if node == nil {
			return
		}

		// 将当前节点加入路径
		path = append(path, node.Val)
		sum -= node.Val

		// 如果是叶子节点,且路径和刚好等于 targetSum
		if node.Left == nil && node.Right == nil && sum == 0 {
			res = append(res, append([]int{}, path...))
		}

		// 递归左右子树
		dfs(node.Left, sum)
		dfs(node.Right, sum)

		// 回溯,移除最后一个元素
		path = path[:len(path)-1]
	}

	dfs(root, targetSum)
	return res
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
func pathSum(root *TreeNode, targetSum int) [][]int {
	var res [][]int
	var path []int

	var dfs func(cur *TreeNode, curSum int)
	dfs = func(cur *TreeNode, curSum int) {
		if cur == nil {
			return
		}
		// 将当前节点的值添加到路径中
		path = append(path, cur.Val)
		curSum += cur.Val

		// 如果是叶子节点,检查路径和是否等于目标值
		if cur.Left == nil && cur.Right == nil {
			if curSum == targetSum {
				res = append(res, append([]int{}, path...))
			}
		} else {
			// 继续遍历左子树和右子树
			dfs(cur.Left, curSum)
			dfs(cur.Right, curSum)
		}

		// 回溯,移除当前节点
		path = path[:len(path)-1]
	}

	dfs(root, 0)
	return res
}

➡️ 点击查看 Java 题解

1
write your code here
本文作者:
本文链接: https://hgnulb.github.io/blog/2025/58259664
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处!