4
我想通了深度优先遍历树。广度优先遍历树,巨蟒
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
我似乎无法找到广度优先搜索解决方案。将不得不使用队列或堆栈?
谢谢!
是的,你必须使用一个队列来保存您检查过,但还没有递归到节点。
从队列中的根节点开始,然后重复[弹出一个节点并为其每个子节点执行所需的任何操作(res += [tree.key]
)并将其推送到队列中]。
你可以用双端去。这是一个经典的实现(使用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
当我将它们存储在一个堆栈中时,是否先存储它们,同时先穿越Depth? – isal 2012-04-16 09:49:29
对不起,队列不叠加。我修复/扩展了我的答案。 – 2012-04-16 09:52:31
明白了!谢谢! – isal 2012-04-16 10:22:48