问题描述:
R. Borist 教授研究树木。他记录了所有他最喜欢的树的前序、中序和后序遍历。然而,他办公室的一场大火烧毁了他存放顺序遍历的文件柜。他仍然拥有所有他最喜欢的树的前序和后序遍历,这些信息是否足以重建丢失的中序遍历?
您必须为以下任务设计和实现一个程序: 输入将包含两个数字列表。第一个列表是某棵树 T 的前序遍历。第二个列表是同一棵树 T 的后序遍历。输出应该是 T 的中序遍历。如果输入未确定唯一树,则任何一致的中序遍历可以退货。
如果它有助于设计您的实现,您可以假设:
- 没有一棵树有超过 1,000 个节点。
- 没有树对多个节点使用相同的标签。
- 节点的标签是从 0 到 10,000 的数字。
样本数据
Input:
2 6 7 1 11 8 5 10 3 4 9
7 8 5 11 10 1 6 4 9 3 2
Output:
7 6 8 11 5 1 10 2 4 3 9
提示
给定树的前序和后序遍历,你能推断出哪个元素是根吗?哪些元素必须来自左子树?从右子树?递归。
首先在保证树中的每个节点都有 2 个或 0 个子节点时解决问题。一些节点只有 1 个子节点的情况有点棘手。
笔记
在您的文章中,您不需要分析解决方案的效率/运行时间(这将是未来项目的要求)。但是要分析它的正确性;即,清楚地解释为什么你的算法是正确的。