将元素添加到二叉树 Haskell



我正在实现BST的插入功能,下面是我的代码:

data Tree a = Empty
| Node Integer (Tree a) a (Tree a)
deriving (Show, Eq)
treeInsert :: (Ord a) => a -> Tree a -> Tree a
treeInsert x Empty = Node 0 Empty x Empty
treeInsert x (Node height left a right)
| x == a = Node height left x right
| x < a = Node height (treeInsert x left) a right
| x > a = Node height left a (treeInsert x right)

当我使用我的代码时,它不会做任何事情,就像重复周期仍在工作一样

tree = foldTree [1, 2, 3]
tree
=> Node 1 (Node 0 Empty 2 Empty) 3 (Node 0 Empty 1 Empty)   
tree = treeInsert 4 tree
tree

我是哈斯克尔的新手,有人可以帮忙吗?多谢。

通过编写tree = treeInsert 4 tree,您可以定义一个名为tree的新变量,该变量以自身 trems 的形式定义。在Haskell中,所有变量都是不可变的,这意味着一旦tree被赋值,你就不能给它赋值。您可以做的是定义一个具有相同名称的新变量,但随后tree = …正文中的tree引用自身。

因此,您可以使用一个新变量:

tree2= treeInsert 4 tree

例如:

Prelude> tree = Node 1 (Node 0 Empty 2 Empty) 3 (Node 0 Empty 1 Empty) 
Prelude> tree2 = treeInsert 4 tree
Prelude> tree2
Node 1 (Node 0 Empty 2 Empty) 3 (Node 0 Empty 1 (Node 0 Empty 4 Empty))

但是,看起来节点的"高度"没有正确更新。

在 Haskell 中,使用变量本身并不少见,例如,您可以使用以下内容制作无限的零列表:

zeros= (0:zeros)

最新更新