首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >SML中的2D二叉树

SML中的2D二叉树
EN

Stack Overflow用户
提问于 2014-10-10 08:46:40
回答 1查看 601关注 0票数 0

我很难弄清楚如何使用sml实现2d二叉树。

这就是我到目前为止所拥有的,但我得到了一个tycon不匹配。

代码语言:javascript
代码运行次数:0
运行
复制
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创建一个错误

EN

回答 1

Stack Overflow用户

发布于 2014-10-12 15:10:59

我想,您可能只需要使用btree数据类型来实现2D二叉树。不需要定义twotree。您只需实现Add2Node函数,该函数通过比较相互递归调用中的y坐标或x坐标,将2d点插入到btree中:

代码语言:javascript
代码运行次数:0
运行
复制
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数据类型。要编译它,必须在这里使用数据类型的构造函数EmptyNode之一。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26290235

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档