据我所记和检查,遍历树或广度优先搜索(BFS)爬行Web的常规方法是使用队列。实际上是否有一种不使用队列实现的方法?
据我所记和检查,遍历树或广度优先搜索(BFS)爬行Web的常规方法是使用队列。实际上是否有一种不使用队列实现的方法?
old
和new
,并在遍历完old
中的所有项目后将其与new
交换。非常类似于使用队列的实现。def breadth_first(root):
if not root:
return
old = []
new = []
old.append(root)
while old:
for n in old:
process(n) # Do something
if n.left:
new.append(n.left)
if n.right:
new.append(n.right)
old = new
new = []
运行时复杂度与队列实现相同,为O(n)。
你应该使用队列,因为它更容易实现。此外,队列允许多台机器一起工作(一个机器将站点排入队列,而另一个机器从队列中弹出站点以遍历)。
我看到的另一种方法是使用递归(更加困难,使用的内存略微多一些或少一些)。
使用递归。但队列在栈中...