Data structures 是否可以使用前序和后序序列创建二叉非唯一树?

Data structures 是否可以使用前序和后序序列创建二叉非唯一树?,data-structures,Data Structures,是否可以使用前序和后序序列创建二叉非唯一树?如果可以,如何实现?例如,我如何为以下对象创建非唯一树: 预订单: B C I J K H D E F G 邮购: I H K J C G F E D B 可能有多少个?预订单psedo代码: preorder (tree) { if tree isn't empty then { print key[tree] preorder left[tree] preorder right[t

是否可以使用前序和后序序列创建二叉非唯一树?
如果可以,如何实现?例如,我如何为以下对象创建非唯一树:

预订单:

B C I J K H D E F G
邮购:

I H K J C G F E D B
可能有多少个?

预订单psedo代码:

preorder (tree)
{
    if tree isn't empty then
    {
        print key[tree]
        preorder left[tree]
        preorder right[tree]
    }
}
邮购为:

postorder (tree)
{
    if tree isn't empty then
    {
        preorder left[tree]
        preorder right[tree]
        print key[tree]
    }
}
因此,按顺序我们可以得出以下结论:

  • “B”必须是根
  • “C”必须是“B”的孩子
  • “G”必须是最大值(树中最右边的节点)或左子树中的最小值(左子树中最左边的节点)——在这种情况下,“G”必须是叶,“F”必须是“G”的父节点
从后订单中我们可以得出以下结论:

  • “I”必须是叶子和最小值(树中最右边的节点)
  • “H”必须是“I”的父级(“I”是“H”的左子女),如果我没有子女,则“H”是树中的下一个最左子女
从这里看,它就像一个数独游戏:


是的:通过使用前序和后序输出,您只能以一种方式构建树。

是的,可以构建具有相同前序和后序序列的不同二叉树。要生成这些不同的树,请查找左或右子树为空的子树,然后简单地交换子树

这个最小的例子

  a         a
 /    vs.    \
b             b

显示两个树,它们都具有预排序
ab
和后排序
ba

给定任意两次遍历,您可以构造一个唯一的二叉搜索树,您是希望这样做还是在搜索其他内容?如果不是,请详细说明非唯一树是什么意思?