4

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

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

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

谢谢!!

4

2 回答 2

8

你可以使用双端队列。这是 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
于 2012-04-16T10:01:44.413 回答
4

是的,您必须使用队列来保存您已检查但尚未递归到的节点。

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

于 2012-04-16T09:47:04.147 回答