0xA*_*xAX 3 algorithm haskell binary-search-tree
我想用带有元组(k,v)的键值叶子构建二叉树.
我的代码:
data Tree k v = EmptyTree
| Node (k, v) (Tree k v) (Tree k v)
deriving (Show, Eq, Ord, Read)
emptyTree :: (k,v) -> Tree k v
emptyTree (k,v) = Node (k, v) EmptyTree EmptyTree
treeInsert :: (Ord k) => (k,v) -> Tree k v -> Tree k v
treeInsert (k,v) EmptyTree = emptyTree (k, v)
treeInsert (a, b) (Node (k,v) left right)
| a == k = (Node (a,b) left right)
| a < k = (Node (a, b) (treeInsert (a, b) left) right)
| a > k = (Node (a, b) left (treeInsert (a, b) right))
Run Code Online (Sandbox Code Playgroud)
现在我正在尝试填充这棵树:
fillTree :: Int -> Tree k v -> Tree k v
fillTree x tree = treeInsert (x, x) tree
Run Code Online (Sandbox Code Playgroud)
但我得到这个错误:
Couldn't match type `v' with `Int'
`v' is a rigid type variable bound by
the type signature for fillTree :: Int -> Tree k v -> Tree k v
Run Code Online (Sandbox Code Playgroud)
原因是什么,我该如何解决?
您的类型太笼统或太具体.它应该是
fillTree :: Int -> Tree Int Int -> Tree Int Int
Run Code Online (Sandbox Code Playgroud)
要么
fillTree :: (Ord a) => a -> Tree a a -> Tree a a
Run Code Online (Sandbox Code Playgroud)
您原来的宣言试图插入(Int, Int)到Tree k v 任何k,v.它说无论你有什么样的树,我们都可以插入一对Ints.这显然是无稽之谈,并且作为您的签名treeInsert表示,只有一对类型(k, v)可以插入到Tree k v.
treeInsert :: (Ord k) => (k, v) -> Tree k v -> Tree k v
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1188 次 |
| 最近记录: |