是什么使树遍历有序或有序?

时间:2019-02-23 19:44:05

标签: algorithm binary-tree binary-search-tree tree-traversal

为什么通过根,左和右遍历树称为预排序?难道不是有序的,因为根始终是第一个?

我之所以这么称呼它没有意义,因为根始终是第一个元素。

3 个答案:

答案 0 :(得分:2)

前缀是指何时应放置根节点的内容。

enter image description here

鉴于此树,您可以用多种方式表示它:

  • 预购:首先放置 Root (然后是 right 个子代),因此该列表将如下所示:
[41, 20, 11, 29, 32, 65, 50, 91, 72, 99]
 ^   --------------  ------------------
 |        |                     |
 |        |                     |-----Right sub-tree
 |        | 
 |        |----Left sub-tree
 |
 |------ Root of the tree

在左侧和右侧子树子列表中,保留了预订

  • 有序:首先放置孩子(如果需要,可以分析),然后放置 root 孩子。看起来像这样:
[11, 20, 29, 32, 41, 50, 65, 72, 91, 99]
 --------------  |   ------------------
      |          |            |
      |          |            |------- Right sub-tree
      |          |
      |          |---- Root of the tree
      |
      |----- Left sub-tree

现在,列表的第一部分表示左侧的子树,将根放在其后,最后是右侧的子树。在这里,顺序也保留在左右子树子列表中。

顺序遍历可以看作是从左到右扫描。

  • 后继订单:首先对个孩子进行分析,然后对 right 个孩子进行分析,最后对 root :< / li>
[11, 32, 29, 20, 50, 72, 99, 91, 65, 41]
 --------------  ------------------  |
       |                 |           |---- Root of the tree
       |                 |        
       |                 |----- Right sub-tree
       | 
       |------ Left sub-tree

与其他字符一样,根字符在末尾,但左和右子列表保留相同的 postorder 属性。


另外,其他可能的遍历可以

  • 按级别:元素按级别从左到右排列在树上
[41, 20, 65, 11, 29, 50, 91, 32, 72, 99]
 |   ------  --------------  ----------
 |      |          |                |-----Level 3
 |      |          |
 |      |          |----- Level 2
 |      |
 |      |------ Level 1
 |
 |----- Level 0 (aka, the root of the tree)

答案 1 :(得分:1)

我们总是有一个限制,即在访问右孩子之前先拜访左孩子。

主要区别是根在哪里。

  • 如果根是两个孩子的之前,我们称其为预购。(Root,Left,Right)

  • 如果根是两个孩子的之后,我们称其为后置订单。 (左,右,根)

  • 如果根在两个子节点之间,则将其按顺序命名。 (左,根,右)

答案 2 :(得分:0)

考虑一下这棵简单的树:

  A
 /  \
B    C

预订遍历ABC

该术语包含单词prepre表示之前。因此,根在任何子代之前。请注意,ABC之前

后处理遍历BCA

该术语包含单词postpost表示之后。因此,根源在于其任何子代。请注意,ABC之后

遍历顺序BAC

该术语包含单词InIn表示内部(中间)。因此,根源位于其子代中间。请注意,ABC之间