当前位置: 首页 > 知识库问答 >
问题:

Ocaml帮助树遍历

逑衡
2023-03-14

问题描述:

鲍里斯特教授研究树木。他记录了所有他喜欢的树的前序、序和后序遍历。然而,他办公室的一场火灾摧毁了他存放有序遍历的文件柜。他仍然拥有他最喜欢的所有树的前序和后序遍历,这些信息足以重建丢失的按序遍历吗?

您必须为以下任务设计和实现一个程序:输入将由两个数字列表组成。第一个列表是一些树T的前序遍历。第二个列表是同一棵树T的后序遍历。输出应该是T的无序遍历。如果输入没有确定唯一的树,那么任何一致的无序遍历都可以返回。

如果它有助于设计实现,您可以假设:

  • 没有树有超过1000个节点。
  • 没有树对多个节点使用相同的标签。
  • 节点的标签是从0到10000的数字。

样本数据

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个答案

武嘉祥
2023-03-14

即使问题描述没有明确地这样说,从提示中可以清楚地看出,我们正在处理二叉树

提示很好:找到树的根,然后找到左子树的根和右子树的根。

删除根后,在节点列表中寻找可以剪切列表的位置:剪切前的节点来自左侧子树,剪切后的节点来自右侧子树。

像你那样做一些小例子是个好主意。

具体回答“理解如何从pre和post构建索引遍历”:首先从pre和post遍历重建树,然后从树构建索引遍历。

 类似资料:
  • 问题内容: 我有一个Person类,我想创建一棵树。这是Person类的解释器。 c1是左边的孩子,c2是右边的孩子。所以说我创建了三个这样的人: 因此,在这里您说亚当是根节点,亚当的左孩子是b,这是芭芭拉,他的右c是卡尔,依此类推。 所以我想做的是编写一个count方法,该方法计算包括在内的子代数。因此a.count()将返回6(如果Person f没有任何孩子)。 这是我的代码: 我在纸上运行

  • 记住命令,特别是命令的用法挺难,不同的命令都有各自的可以使用的参数。一般的命令都支持 --help 参数,它会为你显示命令的帮助信息,比如可用的参数,参数的作用等等。或者也可以使用 man 命令查看命令的帮助手册。 查看帮助,例如看一下 curl 命令的帮助信息: curl --help 返回信息截取: Usage: curl [options...] <url> Options: (H) me

  • 问题内容: 我不太确定自己是在说这种权利,但请耐心等待。 我想知道是否有可能在SQL(特别是MySQL)中做这样的事情:假设我们有树状数据保存在下表中的数据库中: 因此,除“根”行外,每一行都有一个父级,而叶行除外,每一行都有子级。 是否可以仅使用SQL查找任何给定行的所有后代? 问题答案: 可以仅使用SQL而不是在单个查询中获取所有后代。但是我敢肯定,你知道了。我假设您的意思是您想在单个查询中执

  • Object: JSON JSON解码器和编码器。 JSON Method: encode 转换一个对象或数组为JSON字符串。 语法: var myJSON = JSON.encode(obj); 参数: obj - (object) 转换为字符串的对象。 返回: (string) JSON字符串。 示例: var fruitsJSON = JSON.encode({apple: 'red',

  • 我在一个JPanel中有3个组件,其中GridBagLayout是JPanel的LayoutManager,并在这3个组件上使用GridBagConstraints。 使用当前代码(如下所示),3个元素会正确地出现在面板上。问题是第一个组件是一个JLabel,它有时很长,如果是这样的话,它就会扩展,使其他两个组件变小。 我的目标是拥有一个GridBagLayout为1行4列的JPanel,其中第一

  • 帮助教程 帮助文档        LSV帮助文档详细介绍里产品的使用及操作,极大的方便了用户对的LSV的使用。 点击链接了解详情 视频教程        业内资深人士录制了相关教学视频,不仅对软件进行了介绍,也对行业的相关概念和知识点进行了深入的分析和解释,欢迎大家观看! 点击链接了解详情 博客        LSV的博客里有一系列的关于LSV的FAQ以及一些问题的解决方案,并且可以进行关键词的搜