跳到主要内容

在二元树中找出和为某一值的所有路径 ?

参考答案:

在二元树(即二叉树)中找出和为某一值的所有路径,可以使用深度优先搜索(DFS)的方法来解决。以下是一个使用 Python 编写的递归解决方案:

class TreeNode:
    def __init__(self, x):
        self.val = x
        self.left = None
        self.right = None

def path_sum(root, sum_value):
    if not root:
        return []

    # 如果当前节点是叶子节点,并且其值等于目标和,则将该路径添加到结果中
    if not root.left and not root.right and root.val == sum_value:
        return [[root.val]]

    # 递归地在左子树和右子树中查找路径
    left_paths = path_sum(root.left, sum_value - root.val)
    right_paths = path_sum(root.right, sum_value - root.val)

    # 将当前节点添加到左子树和右子树中找到的路径中
    result = []
    for path in left_paths:
        result.append([root.val] + path)
    for path in right_paths:
        result.append([root.val] + path)

    return result

# 示例用法
root = TreeNode(5)
root.left = TreeNode(4)
root.right = TreeNode(8)
root.left.left = TreeNode(11)
root.left.left.left = TreeNode(7)
root.left.left.right = TreeNode(2)
root.right.left = TreeNode(13)
root.right.right = TreeNode(4)
root.right.right.left = TreeNode(5)
root.right.right.right = TreeNode(1)

sum_value = 22
result = path_sum(root, sum_value)
print(result)

这个代码首先定义了一个 TreeNode 类来表示二叉树的节点。然后,path_sum 函数接受一个根节点和一个目标和作为参数,并返回所有从根节点到叶子节点的路径,这些路径的节点值之和等于目标和。

path_sum 函数中,我们首先处理特殊情况:如果当前节点是叶子节点,并且其值等于目标和,则将该路径添加到结果中。然后,我们递归地在左子树和右子树中查找路径,并将当前节点添加到找到的路径中。最后,我们返回所有找到的路径。

在示例用法中,我们创建了一个二叉树,并调用 path_sum 函数来查找所有和为 22 的路径。输出将是一个包含所有符合条件的路径的列表。