在二元树中找出和为某一值的所有路径 ?
参考答案:
在二元树(即二叉树)中找出和为某一值的所有路径,可以使用深度优先搜索(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 的路径。输出将是一个包含所有符合条件的路径的列表。