【问题标题】:OCaml tree traversal - how do I traverse a multiway tree [closed]OCaml 树遍历 - 我如何遍历多路树 [关闭]
【发布时间】:2021-02-02 09:34:24
【问题描述】:

如何从叶子到顶部遍历具有以下类型定义的多路树

type tree = Branch of float * tree list | Leaf

【问题讨论】:

  • 我会一一建议。你试过了吗?
  • 也许给我们看一段你试过的代码,然后我们可以帮助理解为什么它不起作用?
  • 处理节点值之前的叶子,首先遍历列表,然后处理节点的值。

标签: recursion tree ocaml traversal


【解决方案1】:

与遍历二叉树的方式相同,只是需要使用List.fold_left(或其他适当的列表迭代器)来遍历子树。下面是大致的大纲,

let rec traverse work tree = match tree with 
| Leaf -> ... do the leaf work and add it to `work`...
| Branch (w,trees) -> 
  let r = List.fold_left traverse work trees in
  ... finish the branch work ...

关键时刻:

  1. 不要忘记rec,这样你就可以在traverse中使用traverse
  2. work 参数保存已遍历节点完成的工作
  3. 最终结果应该是所有节点所做工作的总和(直到总和的某种定义)。

【讨论】:

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