【问题标题】:What makes a tree traversal pre-order or in-order?是什么让树遍历预先排序或有序?
【发布时间】:2019-07-17 15:14:38
【问题描述】:

为什么树的根、左、右遍历称为预序?那不应该是有序的吗,因为根总是第一个?

对我来说为什么这样称呼它没有意义,因为根始终是第一个元素。

【问题讨论】:

  • 搜索名称的前缀是根在集合(right, root, left)的顺序中的位置-因此in-order是根在中间时(而不是在(=pre)之前或之后(=发布))
  • @dWinder 不应该是(left, root, right)吗?
  • 你是对的——重要的是根在中间

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


【解决方案1】:

我们总是有左孩子在右孩子之前被访问的限制。

主要区别在于根在哪里。

  • 如果根是两个孩子之前,我们称之为前序。(根,左,右)

  • 如果根是两个孩子之后,我们称之为后序。 (左、右、根)

  • 如果根在两个孩子之间,我们称它为中序。 (左、根、右)

【讨论】:

    【解决方案2】:

    前缀是指什么时候应该放置根节点的内容。

    给定这棵树,您可以用多种方式表示它:

    • 预购Root放在第一位(然后是leftright孩子),所以列表看起来像如下:
    [41, 20, 11, 29, 32, 65, 50, 91, 72, 99]
     ^   --------------  ------------------
     |        |                     |
     |        |                     |-----Right sub-tree
     |        | 
     |        |----Left sub-tree
     |
     |------ Root of the tree
    

    在左右子树子列表中保留preorder

    • 按顺序:首先放置子节点(如果愿意,可以进行分析),然后是子节点。它看起来像这样:
    [11, 20, 29, 32, 41, 50, 65, 72, 91, 99]
     --------------  |   ------------------
          |          |            |
          |          |            |------- Right sub-tree
          |          |
          |          |---- Root of the tree
          |
          |----- Left sub-tree
    
    

    现在,列表的第一部分代表左子树,根放在后面,最后是右子树。在这里,inorder 也保存在左右子树子列表中。

    中序遍历可以看成是一种从左到右的扫描。

    • 后序:首先分析子,然后是子,最后是
    [11, 32, 29, 20, 50, 72, 99, 91, 65, 41]
     --------------  ------------------  |
           |                 |           |---- Root of the tree
           |                 |        
           |                 |----- Right sub-tree
           | 
           |------ Left sub-tree
    

    和其他一样,root在最后,但左右子列表保持相同的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)
    

    【讨论】:

      【解决方案3】:

      考虑一下这个简单的树:

        A
       /  \
      B    C
      

      预购遍历ABC

      该术语包含单词prepre 表示之前。所以根在它的任何孩子之前。注意ABC 之前

      后序遍历BCA

      该术语包含单词postpost 表示之后。所以根在它的任何一个孩子之后。注意ABC 之后

      中序遍历BAC

      该术语包含单词InIn 表示内部(中间)。所以根在它的孩子中间。请注意,A 介于 BC 之间

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-01-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-08-10
        相关资源
        最近更新 更多