微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

SML:计数节点

如何解决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)

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。