基本上我想把一个 BST 树变成一个地图,其中节点是键,节点的出现次数是值。所以如果我输入这个:
toMap(第 13 页)
我会得到
> [(13,1)]
这是我到目前为止所拥有的:
data Tree a = Empty | Node a (Tree a) (Tree a) deriving (Show)
leaf x = Node x Empty Empty
toMap' :: Int -> Tree a -> ([(a, Int)], Int)
toMap' a Empty = ([], a)
toMap' a (Node x xl xr) = ((x, a): xl' ++ xr', k)
where (xl', i) = toMap' (a+1) xl
(xr', k) = toMap' (i) xr
toMap :: Tree a -> [(a, Int)]
toMap = fst. toMap' 1
该程序返回一个地图,但值不正确。每个值都比前一个值大一(因此,如果有 3 个节点,则第三个节点的值将是 3)。我想我必须在每个新键上放置一个计数器,但我不确定如何。提前致谢