【问题标题】:Printing elements of the tree at level n在第 n 级打印树的元素
【发布时间】:2020-07-09 17:22:31
【问题描述】:

灌木是一棵树,树节点可以没有孩子、一个孩子或两个 子节点。每个树节点都存储一个类型为“a”的实例。多态类型 '灌木的定义如下。

type 'a bush = 
  None
| One of 'a*'a bush
| Two of 'a*'a bush*’a bush

编写一个函数 print_level : 'a bush -> int -> 打印键的单元 使用第二个参数定义的给定级别的灌木节点数。

我一直在重做一些旧问题并偶然发现了这一点。我不知道如何开始。

【问题讨论】:

  • 其实只是一个递归函数,计算每次迭代。

标签: ocaml


【解决方案1】:

你没有说级别是如何编号的。为简单起见,假设它们从根处的 0 开始编号,并且子级的级别比其父级的级别高 1。

最简单的可能是递归思考。如果您知道参数n 始终为0 会怎样?函数会是什么样子?

现在假设你想用参数n 编写你的函数print_level。假设您有一个函数适用于小于n 的所有级别值。你如何使用这个其他功能来解决你在级别n 的问题?

那么大的揭示是这个另一个函数就是你的函数本身,递归地调用它自己。

【讨论】:

    【解决方案2】:

    我已经卖掉了。递归减少 n 直到我们达到 0 并打印该级别的每个元素。与树木一起工作真的很漂亮。

    let rec print_level (tr:'a bush) n =
    match tr with
    | None -> raise Not_found
    | One (v,d) when n = 0 -> print_int v
    | Two (v,l,d) when n = 0 -> print_int v
    | One (v,d) -> print_level d (n-1)
    | Two (v,l,d) -> print_level d (n-1);
        print_level l (n-1);;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-03-06
      • 2023-03-19
      • 2023-02-03
      • 2018-10-05
      • 2012-03-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多