找到仅按顺序遍历的二叉树

时间:2016-01-22 18:59:23

标签: binary-tree inorder preorder

我给出了有序遍历并需要找到二叉树。我提到了我的网站,大多数人说这是不可能的。但是,我认为一个非唯一的二叉树是可能的。我可以使用给定的有序遍历找到二叉树吗?如果没有,我可以从给定的有序遍历找到相应的预订遍历吗?

我尝试通过选择有序的中心节点作为根来将顺序转换为预订,但我不确定它是否正确。请指导我。

谢谢。

2 个答案:

答案 0 :(得分:2)

鉴于节点的有序遍历,以及问题中没有更多信息,您可以找到 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。由于这些树都生成相同的有序遍历,但是不同的预先遍序遍历,因此对于给定的有序遍历,不能保证是单个唯一树或甚至是单个唯一的预先遍历遍历。

答案 1 :(得分:0)

对于一个节点的更多节点,没有包含inorder遍历的唯一二叉搜索树。

但是如果你想要一棵树,那么只需执行随机序列的随机混乱,然后将得到的随机序列插入二叉搜索树