Algorithm 使用DFS序列化树

Algorithm 使用DFS序列化树,algorithm,tree,graph-algorithm,depth-first-search,Algorithm,Tree,Graph Algorithm,Depth First Search,根据,给定具有不同元素的树,前序或后序与顺序配对足以唯一地描述该树。然而,前序和后序在树结构中留下了一些模糊性 我正在寻找一个能证明这一主张的快速例子 因此,考虑到以下树: 订单如下: Pre Order: 1, 2, 4, 3, 5, 7, 8, 6 In Order: 4, 2, 1, 7, 5, 8, 3, 6 Post Order: 4, 2, 7, 8, 5, 6, 3, 1 如何使用此树的预顺序和顺序或后顺序和顺序反序列化此树 感谢因此,我们的主张是,给定树的预顺序和顺序遍历

根据,给定具有不同元素的树,前序或后序与顺序配对足以唯一地描述该树。然而,前序和后序在树结构中留下了一些模糊性

我正在寻找一个能证明这一主张的快速例子

因此,考虑到以下树:

订单如下:

Pre Order:  1, 2, 4, 3, 5, 7, 8, 6
In Order:   4, 2, 1, 7, 5, 8, 3, 6
Post Order: 4, 2, 7, 8, 5, 6, 3, 1
如何使用此树的预顺序和顺序或后顺序和顺序反序列化此树


感谢

因此,我们的主张是,给定树的预顺序和顺序遍历,我们可以唯一地构造树

在你的例子中 前序:1,2,4,3,5,7,8,6 顺序:4,2,1,7,5,8,3,6

现在,树中的根节点将是预顺序遍历中的第一个节点。此外,在按序遍历中出现在值之前的所有数字都将位于该节点的左子树中。类似地,在一个值之后出现的所有值都位于右子树中。因此,以这种递归方式继续将对树进行反序列化。你可以在这里了解更多


类似地,您可以在给定树的后序和顺序遍历的情况下对其进行反序列化。在这里,后序遍历中出现的最后一个值将是树的根。您可以从post order和order from here中阅读有关反序列化的内容

生成的树不是二叉搜索树,而是二叉树。@Nikunbanka:好的,谢谢,我相应地更新了标题。@barakmanos查看维基百科文章引用的源代码,那里有解释:树的根是1,树的左侧是4和2,右侧是7、5、8、3和6。下一步是什么?递归地对左半部分按序={4,2}和按序={2,4}。返回的树成为根为1的树的左子树。右半部分inoorder={7,5,8,3,6}和preorder={3,5,7,8,6}。好的,我用preorder找到树的根,然后用inoorder找到树的左右两侧。然后,我在左边,找到哪个值是第一个出现在前序中的。该值是左子树的根。现在,我回到索引,我找到了该子树的左侧和右侧。在本例中,左侧仅包含值4。但要确定右边包含什么并不容易。在本例中,它是空的,但如何有效地确定它?