SML:计数节点

问题描述

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

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;

我想知道是否需要操纵它以与我的树结构保持一致才能使它起作用?

解决方法

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

您的教授提供的模板不适用于此类型,但适用于记住大小的另一种树类型。它演示了如何通过模式匹配和递归来计算此类树的大小,这两种语言功能也都需要使用。

因此,任务是为'a bin_tree类型编写一个完全不同的函数。您必须找出正确的模式匹配方法。首先,getSize的模板不会累加:在三种情况下,三个构造函数分别为EmptyLeaf xNode (L,x,R)。但是'a bin_tree类型只有两个构造函数,Leaf xNode (L,sizeL,sizeR,R)

因此,您想了解如何对数据类型执行模式匹配。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...