queue - 不使用队列可以进行广度优先搜索或广度优先遍历吗?

标签 queue web-crawler breadth-first-search

我记得并检查过,遍历树或爬行网络广度优先 (BFS) 的常用方法是使用队列。实际上有没有办法不使用队列来实现它?

最佳答案

我知道这个问题现在很老了,但我只是想回答。您可以使用数组、链表(或任何其他线性容器)而不使用递归来执行此操作。保留两个容器,oldnew ,并交换 oldnew当您遍历 old 中的所有项目时.非常类似于队列的实现。

在 Python 中,它看起来像:

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)。

关于queue - 不使用队列可以进行广度优先搜索或广度优先遍历吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/855899/

相关文章:

algorithm - 如何找到所有最短路径

c++ - 从 txt 文件读取到 FIFO 队列中进行处理

python - Scrapy 停止抓取但继续爬取

python - 使用 Python 抓取网站时设置代理

javascript - 仅获取维基百科摘要

java - 我对 Node 类的引用中的类型转换

algorithm - 在广度优先搜索和深度优先搜索中为什么访问的数组是全局初始化的

python - 重复轮询列表以查看哪个作业已完成的最佳方法

c++ - 在C++中制作动态队列

Python。如何从队列/主题 ActiveMQ 中删除任何消息