📅  最后修改于: 2023-12-03 15:37:24.824000             🧑  作者: Mango
在 N 叉树中,一个路径是从根节点到任何叶子节点的一个序列。这个序列可以用一个数组表示,数组中的元素是节点的值。给定一个整数 sum,找出所有根节点到叶子节点的路径中,满足路径上所有节点值的和等于 sum 的唯一路径。
我们可以使用回溯法来找到所有满足条件的路径。具体而言,从根节点开始,依次向下遍历每个节点,并记录当前路径的节点值和。如果当前节点是叶子节点,且当前路径的节点值和等于 sum,那么将当前路径添加到结果列表中。将当前节点从路径中弹出,回溯到上一个节点,继续遍历下一个子节点。
class Solution:
def pathSum(self, root: 'Node', sum: int) -> List[List[int]]:
def backtrack(node, path, target):
if not node:
return
path.append(node.val)
target -= node.val
if target == 0 and not node.children:
res.append(path[:])
for child in node.children:
backtrack(child, path, target)
path.pop()
res = []
backtrack(root, [], sum)
return res
我们可以使用深度优先搜索来找到符合条件的路径。从根节点开始,依次遍历每个节点,记录当前节点值和。如果当前节点是叶子节点,且当前节点值和等于 sum,那么将路径添加到结果列表中。如果当前节点不是叶子节点,那么遍历当前节点的每个子节点,并添加其值到当前节点值和中,继续搜索下一个节点。
class Solution:
def pathSum(self, root: 'Node', sum: int) -> List[List[int]]:
def dfs(node, path, target):
if not node:
return
if target == node.val and not node.children:
res.append(path+[node.val])
return
for child in node.children:
dfs(child, path+[node.val], target-node.val)
res = []
dfs(root, [], sum)
return res
在 N 叉树中计算具有给定总和的唯一路径,可以用回溯法或深度优先搜索两种方式求解。这两种方法的时间复杂度与空间复杂度相同,为 O(N)。需要注意的是,在回溯法中需要在搜索过程中对路径进行添加和弹出,而在深度优先搜索中需要在返回时对路径进行添加和删除操作,否则会影响搜索结果。