基本上我想將BST樹變成一個映射,其中節點是鍵,節點的出現次數是值。所以,如果我輸入的是:Haskell:將樹變成地圖
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
這個程序返回地圖但值不正確。每個值比前一個值大1(因此如果有3個節點,那麼第三個節點的值將是3)。我想我必須在每個新鑰匙上放置一個計數器,但我不確定如何。在此先感謝
另請參閱[這個答案](http://stackoverflow.com/a/9498623/1598537);如果你把它做成'可摺疊',你可以將它摺疊成一張整潔的地圖。 – AndrewC