我很难弄清楚如何使用sml实现2d二叉树。
这就是我到目前为止所拥有的,但我得到了一个tycon不匹配。
datatype btree =
Empty |
Node of int * btree * btree;
fun AddNode (i:int, Empty) = Node(i, Empty, Empty) |
AddNode(i:int, Node(j, left, right)) =
if i = j then Node(i, left, right)
else if i < j then Node(j, AddNode(i, left), right)
else Node(j, left, AddNode(i, right));
fun printInorder Empty = () |
printInorder (Node(i,left,right)) =
(printInorder left; print(Int.toString i ^ " "); printInorder right);
datatype twotree =
Empty |
Node of int * twotree * twotree * btree;
fun Add2Node(int:i, int:j, Empty) = Node(i, btree, Empty, Empty) |
Add2Node(int:i, int:j, Node(k, btree, left, right)) =
if i = k then Node(i, Addnode(j, root), left, right)
else if i < k then Node(k, root, Add2Node(i, j, left), right)
else Node(k, root, left, Add2Node(i, j, right));
val x : btree = AddNode(50, Empty);
val x : btree = AddNode(75, x);
val x : btree = AddNode(25, x);
printInorder(x);
val最初是用来测试二叉树的第一部分的,但一旦我尝试测试2d部分,它就会用原始的AddNode创建一个错误
发布于 2014-10-12 15:10:59
我想,您可能只需要使用btree
数据类型来实现2D二叉树。不需要定义twotree
。您只需实现Add2Node
函数,该函数通过比较相互递归调用中的y坐标或x坐标,将2d点插入到btree
中:
fun Add2Node (y, x, tree) = insertY (y, x, tree)
and insertY (y, x, Empty) = Node (y, insertX (y, x, Empty), Empty)
| insertY (y, x, Node (k, left, right)) =
if y < k then
Node (k, insertX (y, x, left), right)
else
Node (k, left, insertX (y, x, right))
and insertX (y, x, Empty) = Node (x, Empty, Empty)
| insertX (y, x, Node (k, left, right)) =
if x < k then
Node (k, insertY (y, x, left), right)
else
Node (k, left, insertY (y, x, right))
给定的代码可以编译,但未经过测试。您的Add2Node
代码不能根据某些类型错误进行编译(例如:类型注释必须放在变量之后,而不是像C++和Java中那样放在变量之前)。此外,您将在模式匹配位置使用btree
数据类型。要编译它,必须在这里使用数据类型的构造函数Empty
或Node
之一。
https://stackoverflow.com/questions/26290235
复制相似问题