将元素从标准ML中的列表插入树中

时间:2010-03-12 11:54:16

标签: list tree sml ml

我刚开始自学SML并且遇到了教程中的问题。 我想说:

树数据类型

datatype node of (tree*int*tree) | null

插入功能

fun insert (newItem, null) = node (null, newItem, null)
|   insert (newItem, node (left, oldItem, right)) =                               
    if (newItem <= oldItem) then node (insert(newItem,left),oldItem, right)
                            else
                                 node (left, oldItem, insert(newItem, right)

整数列表

val intList  = [19,23,21,100,2];

我的问题是如何添加一个函数来循环遍历列表中的每个元素并添加到树中?

非常感谢您的回答。

1 个答案:

答案 0 :(得分:1)

使用foldl将insert作为折叠函数,使用空树作为起始值。

对于列表中的每个项目,foldl将使用项目和最远创建的树作为参数调用insert。调用insert的结果将在下一次调用中用于插入列表中的下一个项目,依此类推。

另请注意,问题中树类型和插入函数的定义已被破坏:首先,您没有为类型指定名称(语法为datatype name = Foo | Bar,而不是datatype Foo | Bar )。其中第二个构造函数名称必须以大写字母开头。所以类型定义必须是datatype tree = Node of (tree*int*tree) | Null,并且在insert函数中你必须用“Node”和“Null”替换每个“node”和“null”。