[英]Find the farest leaf on the left for every node in binary tree - solved - tree traversal in OCaml - left leaves
[英]Ocaml help tree traversal
问题描述:
R. Borist 教授研究树木。 他记录了所有他最喜欢的树的前序、中序和后序遍历。 然而,他办公室的一场火灾摧毁了他存放 inorder 遍历的文件柜。 他仍然拥有所有他最喜欢的树的前序和后序遍历,这些信息是否足以重建丢失的中序遍历?
您必须为以下任务设计并实现一个程序: 输入将由两个数字列表组成。 第一个列表是某棵树 T 的前序遍历。第二个列表是同一棵树 T 的后序遍历。输出应该是 T 的中序遍历。如果输入没有确定唯一树,则任何一致的中序遍历可以退货。
如果它有助于设计您的实现,您可以假设:
样本数据
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 个子节点的情况有点棘手。
笔记
在您的文章中,您不需要分析解决方案的效率/运行时间(这将是未来项目的要求)。 但是一定要分析它的正确性; 即,清楚地解释为什么你的算法是正确的。
即使问题描述没有明确说明,从提示中可以清楚地看出我们正在处理二叉树。
提示很好:找到树的根,然后找到左子树的根和右子树的根。
删除根后,在节点列表中寻找可以剪切列表的位置:剪切前的节点来自左子树,剪切后的节点来自右子树。
像你一样计算小例子是个好主意。
要具体回答“理解我如何从前后遍历构建中序遍历”:首先从前后遍历中重建树,然后从树中构建中序遍历。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.