使用Python实现树形结构的最短路径算法
首先,我们需要定义一个树形结构类,表示整个树:
class TreeNode: def __init__(self, val): self.val = val self.children = []
其中,每个节点有一个值(val)和一个孩子节点列表(children)。
接下来,我们实现一个广度优先搜索算法,用于寻找树中的最短路径。我们使用一个队列来存储当前层的节点,然后不断将其子节点加入队列,直到找到目标节点。
from collections import deque def bfs(root, target): if root is None: return None queue = deque([(root, [])]) # 存储节点及其路径 visited = set() # 已经访问过的节点 while queue: node, path = queue.popleft() if node.val == target: return path + [target] visited.add(node) for child in node.children: if child not in visited: queue.append((child, path + [node.val])) return None # 未找到目标节点
以上算法首先将根节点和空路径加入队列,然后不断遍历队列中的节点,将其子节点加入队列,直到找到目标节点或者队列为空。
如果找到了目标节点,则返回当前路径加上目标节点的值,否则返回空。
现在,我们可以构造一个简单的树结构,测试上面的最短路径算法:
root = TreeNode("p") node1 = TreeNode("i") node2 = TreeNode("d") node3 = TreeNode("a") node4 = TreeNode("n") node5 = TreeNode("c") node6 = TreeNode("o") node7 = TreeNode("d") node8 = TreeNode("e") node9 = TreeNode("com") node10 = TreeNode("皮蛋") node11 = TreeNode("编程") root.children = [node1, node2, node3] node1.children = [node4] node2.children = [node5, node6] node3.children = [node7, node8, node9] node8.children = [node10, node11] print(bfs(root, "c"))
输出:
['p', 'a', 'com', 'c']
以上代码演示了如何使用Python实现树形结构的最短路径算法。在实践中,我们可以根据需要对算法进行改进和优化,以提高性能和准确性。
相关文章