Binary tree SML:计数节点
我的任务是编写一个计算二叉树大小的函数。这是树结构的实现:Binary tree SML:计数节点,binary-tree,sml,treenode,Binary Tree,Sml,Treenode,我的任务是编写一个计算二叉树大小的函数。这是树结构的实现: 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
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;
我想知道我是否需要对其进行操作以使其与我的树结构一致,从而使其正常工作?bin_tree类型会记录每个子树的大小。因此,如果允许您假设存储的大小是正确的,则可以返回树的大小,而无需递归 教授给出的模板不是针对这种类型,而是针对另一种不记忆大小的树类型。它演示了如何通过模式匹配和递归计算这样一棵树的大小,这两种语言特性您也需要使用 因此,任务是为
'a bin_tree
类型编写一个完全不同的函数。你必须弄清楚模式匹配的正确方法是什么。首先,getSize
的模板没有加起来:有三种情况下有三个构造函数,Empty
,Leaf x
和节点(L,x,R)
。但是'a bin_树
类型只有两个构造函数,叶x
和节点(L,sizeL,sizeR,R)
因此,您需要了解如何对数据类型执行模式匹配。bin_树的类型会记录每个子树的大小。因此,如果允许您假设存储的大小是正确的,则可以返回树的大小,而无需递归 教授给出的模板不是针对这种类型,而是针对另一种不记忆大小的树类型。它演示了如何通过模式匹配和递归计算这样一棵树的大小,这两种语言特性您也需要使用 因此,任务是为
'a bin_tree
类型编写一个完全不同的函数。你必须弄清楚模式匹配的正确方法是什么。首先,getSize
的模板没有加起来:有三种情况下有三个构造函数,Empty
,Leaf x
和节点(L,x,R)
。但是'a bin_树
类型只有两个构造函数,叶x
和节点(L,sizeL,sizeR,R)
因此,您需要了解如何对数据类型执行模式匹配。您不应该“操纵”该函数,您应该在自己的类型上使用模式匹配编写自己的函数。这个问题已经在本问答中解决了:您不应该“操纵”该函数,您应该在自己的类型上使用模式匹配编写自己的函数。此问题已在本问答中解决: