【问题标题】:Find a binary tree given only in-order traversal查找仅给定中序遍历的二叉树
【发布时间】:2016-04-29 11:36:07
【问题描述】:

我得到了一个中序遍历,需要找到一棵二叉树。我提到了我的网站,他们中的大多数人说这是不可能的。但是,我认为非唯一二叉树是可能的。我可以使用刚刚给定的中序遍历找到二叉树吗?如果没有,我可以从给定的中序遍历中找到对应的前序遍历吗?

我尝试通过选择 in-order 的中心节点作为根来将 in-order 转换为 pre-order,但我不确定它是否正确。请指导我。

谢谢。

【问题讨论】:

    标签: binary-tree inorder preorder


    【解决方案1】:

    仅考虑节点的顺序遍历,并且问题中没有更多信息,您可以找到 a 二叉树,但正如您所说,不会有唯一的解决方案(特别是如果树不必平衡)。结果,你又可以找到a前序遍历了。

    例如,如果你的中序遍历是[1,2,3,4,5,6,7,8],那么即使树是平衡的,根节点也有多种可能性(即4或5)。如果树不需要必须是平衡的,您可以选择其中任何一个作为根节点。

    这是一个非平衡树的示例,您可以在任意选择 4 作为根节点后构建:

          4
         /  \
        3    6
       /    / \
      2    5   7
     /          \
    1            8
    

    这棵树的预购遍历将产生4,3,2,1,6,5,7,8。同样,如果唯一的要求是您只找到 a 二叉树,这与将 1 设置为根节点并将其他所有内容设置为正确节点一样有效:

    1
     \
      2
       \
        3
         \
          4
           \
            5
             \
              6
               \
                7
                 \
                  8
    

    这棵树的前序遍历将是1,2,3,4,5,6,7,8。由于这些树都生成相同的有序遍历,但不同的前序遍历,对于给定的有序遍历,不能保证有一个唯一的树,甚至是一个唯一的、唯一的前序遍历。

    【讨论】:

    • 那么我如何找到给定有序的二叉树呢?你能解释一下吗?谢谢。
    • @Nisarg Patel 澄清一下 Milo 上面所说的,没有什么可以阻止您拥有只使用左分支或仅使用右分支的“二叉树”。即使在平衡二叉树的情况下,除非您恰好有 2^n-1 个分支,否则您可能会优先选择左子或右子作为人口。鉴于所有这些,预排序不是唯一的,因为它取决于树中节点的排列。如果您使用您喜欢的任何排列构建二叉树,则可以基于该特定树构建预排序列表。
    【解决方案2】:

    对于一个节点的多个,不存在包含中序遍历的唯一二叉搜索树。

    但是如果你想要一棵树,那么只需对中序序列执行随机洗牌,然后将生成的随机序列插入二叉搜索树中

    【讨论】:

      猜你喜欢
      • 2012-11-10
      • 2019-07-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-08-10
      • 1970-01-01
      相关资源
      最近更新 更多