一尘不染

预订前到订单后遍历

algorithm

如果二叉搜索树的前遍历为6、2、1、4、3、7、10、9、11,那么如何获得后遍历?


阅读 165

收藏
2020-07-28

共1个答案

一尘不染

您将获得通过执行以下操作构造的树的预遍历:输出,向左遍历,向右遍历。

由于后序遍历来自BST,因此可以通过对数字进行排序来从后序遍历推断出有序遍历(左遍历,输出,右遍历)。在您的示例中,顺序遍历为1、2、3、4、6、7、9、10、11。

从两个遍历中,我们可以构造原始树。让我们使用一个更简单的示例:

  • 预购:2、1、4、3
  • 按顺序:1、2、3、4

预遍历给我们树的根为2。有序遍历告诉我们1落在左子树中,而3、4落在右子树中。左子树的结构很简单,因为它只包含一个元素。右子树的预遍历是通过从原始预遍历中得到该子树中元素的顺序来推导的:4、3。由此我们知道右子树的根为4,并且从有序遍历(3,4)中我们知道3落入了左子树。我们的最后一棵树看起来像这样:

  2
 / \
1   4
   /
  3

通过树结构,我们可以通过遍历树来获得后序遍历:向左遍历,向右遍历,输出。对于此示例,后序遍历为1、3、4、2。

概括算法:

  1. 预遍历中的第一个元素是树的根。小于根的元素形成左子树。大于根的元素形成右子树。
  2. 使用第1步进行预遍历,找到左子树和右子树的结构,这些遍历由我们算出的元素组成,这些元素按照它们在原始预遍历中出现的顺序排列在该子树中。
  3. 遍历结果树以得到与给定的遍历关联的后遍历。

使用上述算法,与问题中的预遍历关联的后遍历为:1、3、4、2、9、11、10、7、6。到达那里作为练习。

2020-07-28