我想出了一棵树的深度优先遍历。
def _dfs(tree, res):
if tree:
res += [tree.key]
_dfs(tree.left, res)
_dfs(tree.right, res)
return res
我似乎找不到广度优先搜索的解决方案。是否必须使用队列或堆栈?
谢谢!!
我想出了一棵树的深度优先遍历。
def _dfs(tree, res):
if tree:
res += [tree.key]
_dfs(tree.left, res)
_dfs(tree.right, res)
return res
我似乎找不到广度优先搜索的解决方案。是否必须使用队列或堆栈?
谢谢!!
你可以使用双端队列。这是 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
是的,您必须使用队列来保存您已检查但尚未递归到的节点。
从队列中的根节点开始,然后重复[弹出一个节点并为它的每个子节点,执行您需要的任何操作(res += [tree.key]
)并将其推入队列]。