跳到主要内容

简述二叉树中和为某值的所有路径 ?

参考答案:

在二叉树中寻找和为某个特定值的所有路径是一个常见的问题。这通常涉及深度优先搜索(DFS)的策略,递归地遍历二叉树,并在遍历的过程中累加路径上的节点值。

下面是一个可能的解决方案的简述:

  1. 初始化

    • 定义一个全局变量(如列表)来存储所有满足条件的路径。
    • 定义一个辅助函数,该函数将接收当前节点、当前路径的和、目标和以及当前路径。
  2. 递归逻辑

    • 如果当前节点为空,返回。
    • 将当前节点的值添加到当前路径的和中。
    • 如果当前节点是叶子节点并且当前路径的和等于目标和,将当前路径添加到全局变量中。
    • 递归地调用辅助函数,首先处理左子树,然后处理右子树。
    • 在递归调用之后,从当前路径的和中减去当前节点的值,以便在回溯时恢复正确的路径和。
  3. 主函数

    • 调用辅助函数,从根节点开始,初始路径和为0,目标和为给定的值,初始路径为空列表。
  4. 返回结果

    • 返回存储所有满足条件的路径的全局变量。

以下是使用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的所有路径。