一尘不染

二叉树级顺序遍历

algorithm

三种类型的树遍历是有序,前序和后序。

第四种较少使用的遍历是级别顺序遍历。在级别顺序遍历中,深度为“ d”的所有节点都在深度为d +
1的任何节点之前进行处理。级别顺序遍历与其他遍历不同,因为它不是递归完成的;使用队列,而不是隐式的递归堆栈。

我对以上文本片段的疑问是

  1. 为什么不按顺序进行关卡遍历?
  2. 在级别顺序遍历中如何使用队列?使用伪代码进行请求澄清将很有帮助。

谢谢!


阅读 199

收藏
2020-07-28

共1个答案

一尘不染

级别顺序遍历实际上是BFS,它本质上不是递归的。它使用队列而不是堆栈来保存应打开的下一个顶点。发生这种情况的原因是,您希望以FIFO顺序而不是通过递归获得的LIFO顺序打开节点

正如我提到的,级别顺序实际上是一个BFS,其[BFS]伪代码[取自维基百科]为:

1  procedure BFS(Graph,source):
2      create a queue Q
3      enqueue source onto Q
4      mark source
5      while Q is not empty:
6          dequeue an item from Q into v
7          for each edge e incident on v in Graph:
8              let w be the other end of e
9              if w is not marked:
10                 mark w
11                 enqueue w onto Q

(*)在树中,不需要标记顶点,因为您无法通过2条不同的路径到达同一节点。

2020-07-28