本文介绍了树结构如何以JavaScript语言进行遍历,并解释了各种方法的实现,例如广度优先级和深度优先级。
树是一个有趣的数据结构。它广泛用于各个字段。例如:
有许多变体(例如堆,BST等),可用于解决相关问题,例如调度,图像处理,数据库等。许多复杂的问题似乎与树无关,但是可以实际上是作为一个问题表示的。我们还将看到树木如何更易于理解和解决这个问题(本系列背后)。
这意味着二进制树非常简单。
这些代码行将为我们创建二进制树,看起来像这样
非常简单,那么我们可以用它做什么?
让我们尝试穿过这些连接的树节点(或树),就像我们可以穿越数组一样。如果我们也可以“遍历”树节点,那很酷。这不仅是遍历这些的一种方法。我们可以将遍历方法大致分为以下两种:
这样,我们逐步逐步遍历树木。我们将从根开始,然后覆盖其所有子生成。我们涵盖了所有第二个层级生成,这些推动(实际上,即层序列遍历)。例如,树的遍历的结果如下:
这是一棵略带复杂的树的说明,以使其更容易理解。
为了实现此遍历,我们可以使用队列(高级第一)数据结构。以下是整个算法的过程
以下是特定的代码实现:
我们可以稍微修改上述算法并返回数组。每个内部数组代表一个级别,并且元素在其中。
在DFS中,我们从节点开始,一直在寻找其子节点直到找到所有子节点。
所有这些遍历技术都可以在递归和迭代中实施。让我们实现它。
以下是首先穿越的过程。
我们可以使用这种简单的技术手动找出任何树的序言:从根节点开始,以遍历整个树并将自己保持在左侧。
执行:
让我们了解此遍历的具体实现。递归方法非常直观。
首先穿越的迭代方法与BFS非常相似,但是我们使用堆栈而不是队列,然后首先将子节点推向堆栈的右侧。
以下是穿越树的过程。
我们可以使用这种简单的技术手动找出任何树的顺序:在树底部保持平坦的镜子并进行所有节点的投影。
执行:
在上述方法中,我们不能回顾一下导致最左节点的父节点。因此,我们需要堆栈来记录这些。因此,我们的修改方法可能如下
现在,我们可以使用上述方法实现最终迭代算法。
以下是遍历邮政遍历的过程。
对于任何树的快速手动遍历:一一选择所有最左边的叶子。
执行:
我们已经有迭代算法首先遍历它。我们可以使用它吗?因为序列遍历遍历似乎是第一个遍历的逆转。
有一些微小的差异,但是我们可以通过修改序言算法来适应这种情况,然后我们应该得到帖子订单的结果。特定算法如下:
如果我们可以通过以下方式穿越这棵树,那应该是多么好
它看起来真的很好,而且阅读很简单,不是吗?我们要做的就是使用步行功能,它将返回迭代器。
以下是我们如何根据上面共享的示例修改上述Wallpreorder函数来执行它。
JavaScript如何穿越树结构
