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

时间:2011-06-09 00:40:44

标签: data-structures

是否可以使用预订和后序序列创建二元非唯一树?
如果是这样,如何做到这一点?例如,我如何为:

创建一个非唯一树

预订:

B C I J K H D E F G

后序:

I H K J C G F E D B

有多少人可以?

2 个答案:

答案 0 :(得分:3)

预购psedo-code:

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”必须是“我”的父母(“我”是“H”左子),以防我没有孩子,否则“H”是树中的下一个最左边的孩子。

从这里开始就像数独:

enter image description here 是的:通过使用预订和后序输出,您只能以一种方式构建树。

答案 1 :(得分:1)

是的,可以构造具有相同的前后序列的不同二叉树。要生成这样不同的树,请查找子项,其中左侧或右侧子项为空,只需交换子项。

这个最小的例子

  a         a
 /    vs.    \
b             b

显示两棵树都有预订a b和预订b a