📅  最后修改于: 2023-12-03 15:10:19.907000             🧑  作者: Mango
这是一个关于树遍历中的问题8的介绍,主要涉及以下内容:
给定一棵二叉树和一个整数sum,求出所有从根节点到叶子节点的路径中,路径上节点的值之和等于sum的路径。
示例:
给定二叉树如下:
5
/ \
4 8
/ / \
11 13 4
/ \ / \
7 2 5 1
sum = 22,则符合条件的路径有:[5, 4, 11, 2], [5, 8, 4, 5]。
我们可以使用 DFS(深度优先搜索)算法遍历该二叉树的所有路径。在遍历过程中,我们需要记录当前遍历路径的节点值、路径和以及路径本身,如果某一路径满足条件,就把该路径加入到结果集中。
具体实现步骤如下:
下面是本题的 Python 代码示例:
class Solution:
def pathSum(self, root: TreeNode, sum: int) -> List[List[int]]:
res = []
path = []
def dfs(node, s):
if not node:
return
path.append(node.val)
s -= node.val
if not node.left and not node.right and s == 0:
res.append(path[:])
dfs(node.left, s)
dfs(node.right, s)
path.pop()
s += node.val
dfs(root, sum)
return res
时间复杂度:$O(NlogN)$
遍历整颗二叉树需要$O(N)$时间复杂度,每个节点都需要进行一次 DFS 操作,因此时间复杂度为 $O(NlogN)$。
空间复杂度:$O(logN)$
DFS 在栈上执行,因此空间复杂度为 DFS 栈的深度,最坏情况下为 $O(logN)$。