Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/sharepoint/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Binary tree SML:计数节点_Binary Tree_Sml_Treenode - Fatal编程技术网

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)


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

您不应该“操纵”该函数,您应该在自己的类型上使用模式匹配编写自己的函数。这个问题已经在本问答中解决了:您不应该“操纵”该函数,您应该在自己的类型上使用模式匹配编写自己的函数。此问题已在本问答中解决: