预订和有两个以上孩子的树木的顺序

时间:2014-07-01 05:11:35

标签: algorithm inorder preorder

我们知道二叉树的给定前序和顺序遍历唯一地定义了树,一般树,即具有两个以上子节点的树,预先排序和顺序遍历是否与树结构一一对应

换句话说,给定一般树的元组(preorder,inorder)它对于一般树是唯一的,或者可以有许多具有相同元组的预订顺序和顺序遍历的树?

2 个答案:

答案 0 :(得分:4)

没有为非二叉树定义有序遍历(访问左子树,访问根,访问右子树)(没有左右子树)。

显然,预订不会唯一地定义树。路径A, B, C与具有根A和子BC的树之间没有区别。

但是,预订和后订单的组合唯一地定义了您的树(假设所有节点都是唯一的)。我们可以通过归纳来证明这一点显然,空字符串唯一地定义了一个空树。

现在,给定非空的预订单和后订单字符串,很明显预订字符串中的第一个节点(以及后序中的最后一个节点)是根R这棵树我们现在需要做的就是确定以R的子项为根的子树(以及相应的预订和后序字符串),因为我们可以通过归纳假设找到它们的结构。

RAaaaaaBbbbbb为预订字符串,aaaaaAbbbbbBR后订单字符串(ab为任意节点)。显然,AR的第一个孩子的根,因为它是预订字符串中的第一个继承者。在后序中,该子树以A结束(按照订购后的定义)。我们切断了那部分,看到R的第二个孩子必须是B。没有R的子项,因为B是后序列字符串中的最后一个节点。我们现在有两个较小的子问题:AaaaaaaaaaaABbbbbbbbbbbB。我们可以通过归纳假设来解决这些问题。

答案 1 :(得分:0)

您只需将常规树转换为二叉树(通过查看here)然后遍历它。