简述二叉树中和为某值的所有路径 ?
参考答案:
在二叉树中寻找和为某个特定值的所有路径是一个常见的问题。这通常涉及深度优先搜索(DFS)的策略,递归地遍历二叉树,并在遍历的过程中累加路径上的节点值。
下面是一个可能的解决方案的简述:
-
初始化:
- 定义一个全局变量(如列表)来存储所有满足条件的路径。
- 定义一个辅助函数,该函数将接收当前节点、当前路径的和、目标和以及当前路径。
-
递归逻辑:
- 如果当前节点为空,返回。
- 将当前节点的值添加到当前路径的和中。
- 如果当前节点是叶子节点并且当前路径的和等于目标和,将当前路径添加到全局变量中。
- 递归地调用辅助函数,首先处理左子树,然后处理右子树。
- 在递归调用之后,从当前路径的和中减去当前节点的值,以便在回溯时恢复正确的路径和。
-
主函数:
- 调用辅助函数,从根节点开始,初始路径和为0,目标和为给定的值,初始路径为空列表。
-
返回结果:
- 返回存储所有满足条件的路径的全局变量。
以下是使用Python编写的示例代码:
class TreeNode:
def __init__(self, val=0, left=None, right=None):
self.val = val
self.left = left
self.right = right
def pathSum(root: TreeNode, targetSum: int) -> List[List[int]]:
def dfs(node, current_sum, target, path):
if not node:
return
current_sum += node.val
path.append(node.val)
if not node.left and not node.right and current_sum == target:
result.append(path[:])
dfs(node.left, current_sum, target, path)
dfs(node.right, current_sum, target, path)
path.pop()
result = []
dfs(root, 0, targetSum, [])
return result
这段代码定义了一个二叉树节点类TreeNode
和一个函数pathSum
,后者使用深度优先搜索来查找二叉树中和为targetSum
的所有路径。