我们知道二叉树的给定前序和顺序遍历唯一地定义了树,一般树,即具有两个以上子节点的树,预先排序和顺序遍历是否与树结构一一对应
换句话说,给定一般树的元组(preorder,inorder)它对于一般树是唯一的,或者可以有许多具有相同元组的预订顺序和顺序遍历的树?
答案 0 :(得分:4)
没有为非二叉树定义有序遍历(访问左子树,访问根,访问右子树)(没有左右子树)。
显然,预订不会唯一地定义树。路径A, B, C
与具有根A
和子B
和C
的树之间没有区别。
但是,预订和后订单的组合唯一地定义了您的树(假设所有节点都是唯一的)。我们可以通过归纳来证明这一点显然,空字符串唯一地定义了一个空树。
现在,给定非空的预订单和后订单字符串,很明显预订字符串中的第一个节点(以及后序中的最后一个节点)是根R
这棵树我们现在需要做的就是确定以R
的子项为根的子树(以及相应的预订和后序字符串),因为我们可以通过归纳假设找到它们的结构。
令RAaaaaaBbbbbb
为预订字符串,aaaaaAbbbbbBR
后订单字符串(a
和b
为任意节点)。显然,A
是R
的第一个孩子的根,因为它是预订字符串中的第一个继承者。在后序中,该子树以A
结束(按照订购后的定义)。我们切断了那部分,看到R
的第二个孩子必须是B
。没有R
的子项,因为B
是后序列字符串中的最后一个节点。我们现在有两个较小的子问题:Aaaaaa
,aaaaaA
和Bbbbbb
,bbbbbB
。我们可以通过归纳假设来解决这些问题。
答案 1 :(得分:0)
您只需将常规树转换为二叉树(通过查看here)然后遍历它。