2013-05-21 53 views
1

因此,这里是我的问题。 我需要编写一个函数,它将在树中添加元素,它是一棵二叉树,因此它必须组织良好。问题在于如何定义我的树。 我有这样的树:在Ocaml的'树中添加元素

type 'a tree = { 
    mutable cont:'a; 
    mutable left:'a bin_tree; 
    mutable right:'a bin_tree 
    } 
    and 'a bin_tree = 
    Empty 
    |Node of 'a bin_tree;; 

所以,当我写的功能,此树添加元素它说,该树的类型为“一棵树,我使用的功能”一bin_tree。

我尝试了很多不同的方式来编写该函数,我得到了同样的错误。 我用最后的功能是:

let rec dodajVDrevo x = function 
Empty -> Node{cont=x; left=Empty; right=Empty} 
|Node{cont; left; right} -> if x < cont then Node{cont; left= dodajVDrevo x left; right} 
else if x > cont then Node{cont; left; right = dodajVDrevo x right} 
else Node{cont; left; right};; 

请帮帮我,给了一些线索。

谢谢!

+0

为什么你将left,right和cont定义为mutable?你的add函数(dodajVDrevo)已经是纯粹的了。 因为它看起来像功课,我认为你的锻炼感觉得到功能性编程风格的熟悉;不会变脏的c-like ocaml代码。 – rafix

+0

这是一个重复的:http://stackoverflow.com/questions/16507273/ocaml-tree-simple-functions – Thomash

回答

2

构造函数Node应取'a tree而不是'a bin_tree

+0

是的,我意识到这一点,但我不知道该怎么做。 – Marko

+2

你是什么意思?只需将'bin_tree'的文本'|节点替换为''树'的节点。 – cygin