我很难搞清楚如何使用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创建了一个错误
答案 0 :(得分:0)
我想,您可能只需使用btree
数据类型来实现二维二叉树。无需定义twotree
。
您只需通过比较相互递归调用中的y坐标或x坐标,实现将{2}点插入Add2Node
的{{1}}函数:
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))
代码不会根据某些拼写错误进行编译(例如:类型注释必须放在变量之后,而不是像C ++和Java之前那样)。此外,您在模式匹配位置使用Add2Node
数据类型。要进行编译,您必须在此处使用数据类型的构造函数btree
或Empty
之一。