JavaScript中的广度优先搜索

在JavaScript编程中,数据可以存储在图形和树之类的数据结构中。 从技术上讲,树是图。

图形数据结构

图是从数学领域演变而来的。 它们主要用于描述显示从一个位置到另一位置的路线的模型。

图由一组节点和一组边组成。 边缘是一对连接的节点。 路径是用于描述共享一条边的节点之间传播的术语。 下图显示了一个具有3个节点和3个边的图形。

JavaScript中的广度优先搜索

树数据结构

树数据结构(如图形)是节点的集合。 有一个根节点。 该节点然后可以具有子节点。 子节点可以有自己的子节点,称为子节点。

重复此操作,直到所有数据都在树数据结构中表示出来为止。 下图显示了树数据结构。

JavaScript中的广度优先搜索

树是没有循环的图形(循环是图形中从同一顶点开始和结束的路径)。 子节点只能有一个父节点。 因此,树不是递归数据结构。

为什么将图和树用作数据结构?

在计算机编程中,一直使用树来定义数据结构。 它们还用作解决问题的算法的基础。

图的最常见实现是找到两个节点之间的路径,找到从一个节点到另一个节点的最短路径,并找到访问所有节点的最短路径。

旅行商问题是使用树算法解决问题的一个很好的例子。

搜索数据

既然您了解了两种数据结构之间的区别,那么我将向您展示如何搜索数据。

搜索图形或树的两种最常见的方法是深度优先搜索和宽度优先搜索。

是否使用深度优先搜索或宽度优先搜索应由树或图数据结构中包含的数据类型确定。

广度优先搜索

这是我们要使用广度优先搜索来搜索树的示例。

JavaScript中的广度优先搜索

在广度优先搜索中,您将从根节点开始。 然后,您将搜索从左到右移动的所有子节点。 搜索完所有子节点后,将在根节点下方的级别上重复此过程。

在每个级别上都重复此过程,直到到达树的末尾或到达最初搜索的节点为止。 下图显示了在广度优先搜索中搜索树的顺序。

JavaScript中的广度优先搜索

为了实现广度优先搜索,您需要某种方式来跟踪在当前级别完成搜索之后接下来需要搜索哪些节点。

为了跟踪接下来需要搜索的节点,您将使用队列作为搜索的中间步骤。 队列是一个FIFO(先进先出)阵列。

为了演示其工作原理,让我引导您完成上图中的1级和2级搜索。

要搜索的第一个节点是根节点或节点A。您将把节点A作为队列中的第一个元素。 然后,您将重复这些步骤,直到队列为空。

JavaScript中的广度优先搜索
  1. 将第一个节点从队列中移出,看看它是否与您的搜索项匹配。
  2. 将节点的所有子节点添加到临时队列中。

搜索的步骤2之后,您的队列队列现在将包含节点A的所有子代。

JavaScript中的广度优先搜索

现在,我们比较节点B,看它是否与我们的搜索结果匹配。 如果没有,则将其从队列中删除,仅留下节点H。然后,将节点B的子级添加到队列中。

JavaScript中的广度优先搜索

该过程将一直持续到搜索完所有节点或找到符合搜索条件的节点为止。

更多文章

感谢您阅读我的文章。 如果喜欢,请单击下面的拍手图标,以便其他人可以找到该文章。 以下是您可能感兴趣的其他一些文章:

JavaScript中的实例化模式
为什么公司文化对您作为软件工程师的职业很重要
使用Node.js和Express.js将数据保存到MongoDB数据库

From: https://hackernoon.com/breadth-first-search-in-javascript-e655cd824fa4