Python的广度优先遍历,Python

时间:2012-04-16 09:44:27

标签: python recursion tree breadth-first-search

我想出了树的深度优先遍历。

def _dfs(tree, res):
    if tree:
        res += [tree.key]
        _dfs(tree.left, res)
        _dfs(tree.right, res)
    return res

我似乎找不到广度优先搜索的解决方案。是否必须使用队列或堆栈?

谢谢!

2 个答案:

答案 0 :(得分:7)

你可以选择deques。这是来自Magnus Lie Hetland的bfs的经典实现(使用FIFO队列)。

from collections import deque

def bfs(G, s):
    P, Q = {s: None}, deque([s]) 
    while Q:
        u = Q.popleft() 
        for v in G[u]:
            if v in P: continue 
            P[v] = u 
            Q.append(v)
    return P

答案 1 :(得分:3)

是的,你必须使用一个队列来保存已经检查但尚未递归的节点。

从队列中的根节点开始,然后重复[弹出一个节点及其每个子节点,执行您需要的任何操作(res += [tree.key])并将其推送到队列中。