当前位置: 首页 > 知识库问答 >
问题:

为什么队列适用于二叉树的关卡顺序遍历?

汪兴为
2023-03-14

我不确定这样的问题是否被接受,如果不被接受,我会很乐意删除/编辑它,但我认为这不仅仅是一个讨论问题,其答案取决于观点和解决方案背后的事实。

所以我读到了二叉树的层次顺序遍历,当我们使用队列数据结构时,存在一个< code>O(n)解决方案。

算法是这样的

1)创建一个空队列q

2) temp_node = 根

3) 在temp_node不为空时循环

a) print temp_node->data.
b) Enqueue temp_node’s children (first left then right children) to q
c) Dequeue a node from q and assign it’s value to temp_node

我理解算法,但我不能理解的是,如果一个人事先不知道,他怎么会想出这个解决方案。换句话说,队列的什么属性(可能是二叉树)使其成为本例中使用的正确DS。在这里使用队列进行二叉树的级别顺序遍历的想法是什么?谢谢

上面树的级序遍历是1 2 3 4 5

共有3个答案

公羊信厚
2023-03-14

通常,当我们在按顺序遍历期间访问一个节点(比如N)时,我们首先将其左子节点推送到队列中,然后将右子节点推送到队列中的下一个元素(假设两者都存在)并继续移动到队列中的下一个元素。

现在,下一个元素将是先前访问的节点n的右元素。

基本上递归结合队列的FIFO属性允许你做有序遍历。

扈运浩
2023-03-14

我想如果你多研究一下BFS,你会自动得到你的答案。

队列具有特殊属性,您可以从一端推送并从另一端弹出。
为了他们穿越

就像级别顺序遍历一样,我们标记访问过的节点并弹出它们,从另一端我们推送要标记访问过的元素,这就是级别顺序遍历所做的。

仔细观察这两个操作,这两个操作是相互独立的。这种操作隔离是由队列提供的。

督阿苏
2023-03-14

当你先遍历树的宽度,宽度会变得越来越宽。您需要一个队列来跟踪下一步要更深入访问的子树的根,就像“待办事项”列表一样。

 类似资料:
  • 我必须创建两个类:NonBinaryTree和SingleNode类,包含一些处理节点和整个树的方法(在NonBinaryTree类中)。我在使用队列(先进先出类型)实现非二叉树的BFS(层次顺序)遍历时遇到过问题。由于二叉树有很多资源,每个节点最多有两个子节点,我还没有找到任何可以帮助我解决非二叉树问题的资源。 到目前为止,我做了这个代码: 我的树: 在此处输入图像描述 我需要按以下顺序处理节点

  • Leetcode问题:https://leetcode.com/problems/binary-tree-level-order-traversal/ 我有两个队列,我清空第一个队列(q),同时向第二个队列(q2)添加元素,这样我可以得到级别。当第一个队列为空时,我将其传递给函数以创建该级别的ArrayList并将其添加到结果值中,如果q2为空,则意味着没有添加任何内容,因此我们可以中断循环并返回

  • 我想对二叉树执行级别顺序遍历。因此,对于给定的树,说: 产出将是: 我知道我可以使用某种队列,但在C中递归地实现这一点的算法是什么?感谢您的帮助。

  • 我尝试按如下方式执行二叉树的垂直顺序遍历:1)找出每个节点与根节点之间的最小和最大水平距离2)创建一个hashmap,将水平距离映射到相应的节点(Map) 然而,我得到了不想要的输出,我认为在实现中有一些错误,因为算法对我来说似乎是正确的。 以下是完整的代码: 输出:{-1=[99999],0=[99999,12],-2=[99999],1=[99999],2=[99999]}那么我的apProc

  • 我正在尝试实现一个levelOrder函数,它接受树的指针并逐级打印树的数据。这是《C如何编程》一书中的一个问题,完整问题如下: (级序二叉树遍历)Fig的程序。12.19说明了遍历二叉树的三种递归方法——顺序遍历、前序遍历和后序遍历。此练习演示了二叉树的级别顺序遍历,其中节点值从根节点级别开始逐级打印。每个级别上的节点从左到右打印。级序遍历不是递归算法。它使用队列数据结构来控制节点的输出。算法如

  • 这是一个相当简单的问题,我注意到当我表示一棵树时,无论我用哪种方式(后排序,按顺序,前排序)树叶总是以相同的顺序出现,从左到右。 我只是想知道为什么,这是有原因的吗? 我刚开始研究它们,就想到了这个。 编辑: 我有一棵这样的树: 叶节点为:D、E和F 预购顺序为:A、B、D、C、E、F 顺序是:D,B,A,E,C,F 后序是:D,B,E,F,C,A 叶子节点总是从左到右出现,不管我选择哪个顺序,问