【问题标题】:OCaml - setting reference to next node in inorder (binary tree)OCaml - 按顺序设置对下一个节点的引用(二叉树)
【发布时间】:2013-12-08 18:02:34
【问题描述】:

键入'一棵树= |空| 'a * 'a tree* 'a tree* 'a tree ref;; 的节点

我们希望将每个节点树的 ref 设置为按顺序排列的下一个节点;

例如

Node (1, Node(2, Empty, Empty, ref Empty), Node(3, Empty, Empty, ref Empty), ref Empty) )
The result is:

Node (1, Node(2, Empty, Empty, content = {Node (1....) }).....

【问题讨论】:

  • 很难在不破坏作业的情况下提供帮助,除非您向我们展示您编写的一些代码并解释为什么以及如何它不能按照您的意愿行事。作为一般提示,我会说这需要弃牌。你必须决定对最后一个节点做什么。
  • 我真的建议你学习 ocaml 和函数式编程。我猜你的老板让你使用 ocaml 来实现某些目标,但是你的 java 命令直觉会让你走向邪恶。拜托,学习一下。
  • 在这种情况下如何使用折叠?

标签: ocaml inorder


【解决方案1】:

这并不难:你做一个中序遍历,同时传递(和 返回)包含在前一个节点中的引用。当你拿到时 对于给定的节点,您将前一个节点的引用设置为 当前节点。如果每个节点都分配给前一个节点的引用 一,这意味着每个节点的引用都包含下一个节点。

在这个例子中,中序遍历遍历树 顺序:2 1 3

当你在节点 2 时,你将它的 ref 返回给调用者,即 节点 1。到达节点 1 时,将节点 2 的 ref 设置为 指向节点 1,然后将节点 1 的 ref 传递给节点 3。当 您在节点 3,您将节点 1 的 ref 设置为指向节点 3。

你需要决定对第一个节点做什么(分配一个虚拟 参考启动进程)和最后一个节点(大概,设置 它对 Empty 的引用,尽管有时它可能对 将其设置为第一个节点)。

我有工作代码(15 行)。我不会发布它,因为那会 破坏假定的任务。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多