LeetCode 437. 路径总和 III

题目描述

437. 路径总和 III

image-20250418223726189

image-20250418223739920

思路分析

前缀和 + 回溯

参考代码

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 {
	prefixSum := map[int]int{0: 1}
	res := 0

	var dfs func(*TreeNode, int)
	dfs = func(cur *TreeNode, curSum int) {
		if cur == nil {
			return
		}

		// 更新当前路径和
		curSum += cur.Val

		// 查找是否有满足条件的路径
		res += prefixSum[curSum-targetSum]

		// 更新哈希表中的前缀和
		prefixSum[curSum]++

		// 递归左右子树
		dfs(cur.Left, curSum)
		dfs(cur.Right, curSum)

		// 回溯,恢复前缀和的状态
		prefixSum[curSum]--
	}

	dfs(root, 0)
	return res
}
  • 时间复杂度:O(n),每个节点只遍历一次。
  • 空间复杂度:O(h),其中 h 是树的高度。

➡️ 点击查看 Java 题解

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