给定一个二叉树,且每个节点存储一个值。设计一个算法,实现:对于一个给定的数值, 打印出所有的路径。这条路径不必要开始于或结束语根节点或叶节点
时间: 2024-06-06 11:07:22 浏览: 123
算法思路:
利用深度优先搜索遍历二叉树,同时记录每个节点的父节点,若当前节点的值等于目标值,则从当前节点开始递归回溯到根节点,将路径上的节点值加入到一个列表中。最终输出所有符合条件的路径。
Python 代码实现:
class TreeNode:
def __init__(self, val=0, left=None, right=None):
self.val = val
self.left = left
self.right = right
def find_path(root, target):
if not root:
return []
res = []
stack = [(root, None)]
while stack:
node, parent = stack.pop()
if node.val == target:
path = []
while node:
path.append(node.val)
node = parent[node]
res.append(path[::-1])
if node.right:
stack.append((node.right, {node.right: node}))
if node.left:
stack.append((node.left, {node.left: node}))
return res
# 测试代码
root = TreeNode(1)
root.left = TreeNode(2)
root.right = TreeNode(3)
root.left.left = TreeNode(4)
root.left.right = TreeNode(5)
root.right.left = TreeNode(6)
root.right.right = TreeNode(7)
print(find_path(root, 5))
print(find_path(root, 8))
# 输出结果
# [[1, 2, 5]]
# []
阅读全文