【问题标题】:SML: Counting nodesSML:计算节点
【发布时间】:2021-01-04 16:37:37
【问题描述】:

我的任务是编写一个计算二叉树大小的函数。这是树结构的实现:

datatype 'a bin_tree = 
    Leaf of 'a
  | Node of 'a bin_tree    (* left tree *)
           * int           (* size of left tree *)
           * int           (* size of right tree *)
           * 'a bin_tree   (* right tree *)

我的教授给了我这个模板:

fun getSize Empty = 0
    | getSize (Leaf _) = 1
    | getSize (Node(t1,_,t2)) = getSize t1 + getSize t2;

我想知道是否需要对其进行操作以使其与我的树结构一致以使其正常工作?

【问题讨论】:

  • 你不应该“操纵”那个函数,你应该使用你自己类型的模式匹配来编写你自己的函数。
  • 此问题已在本问答中得到解决:verifying size of binary trees?

标签: binary-tree sml treenode


【解决方案1】:

'a bin_tree 类型会记住每个子树的大小。因此,如果允许您假设存储的大小是正确的,则无需递归即可返回树的大小。

你教授给出的模板不是针对这种类型的,而是针对另一种记忆大小的树类型。它演示了如何通过模式匹配和递归来计算这种树的大小,这两种语言特性都需要使用。

因此,您的任务是为'a bin_tree 类型编写一个完全不同的函数。您必须弄清楚模式匹配的正确方法是什么。首先,getSize 的模板没有加起来:有三个构造函数 EmptyLeaf xNode (L, x, R) 的三种情况。但是'a bin_tree 类型只有两个构造函数,Leaf xNode (L, sizeL, sizeR, R)

所以您想了解如何对数据类型执行模式匹配。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-08
    • 2014-04-09
    • 2015-09-07
    • 1970-01-01
    • 2016-05-16
    相关资源
    最近更新 更多