listTree' :: Tree a -> [a]
listTree' t = foldTree f z t []
where
f = undefined
z [] = []
需要幫助解決 f。當我插入時f a b c = a [b] c出現錯誤
data Tree a
= Tip
| Bin (Tree a) a (Tree a)
deriving (Show, Eq)
foldTree :: (b -> a -> b -> b) -> b -> Tree a -> b
foldTree f z Tip = z
foldTree f z (Bin l x r) = f (foldTree f z l) x (foldTree f z r)
這是樹的 foldTree 和資料型別
uj5u.com熱心網友回復:
為了實作線性時間,您應該foldTree f z t回傳一個接受串列并回傳串列的函式。
這意味著對于z一個葉子,我們只回傳給定的串列,因此我們不添加任何值。因為f我們將獲取串列,用右子樹呼叫它,然后用該Bin節點的值添加該串列,最后用左子樹呼叫它,所以:
listTree' :: Tree a -> [a]
listTree' t = foldTree f id t []
where f x y z ls = x (y: z ls)
ls因此,這里是我們需要處理的串列,z是將右子樹的項添加到 的函式ls,y是存盤在該節點中的值,并且x是將左子樹的項添加到串列的函式。
我們可以f像@chi 所說的那樣定義f x y z = x . (y:) . z。因此,我們首先應用為右子樹生成的函式,然后在串列前面加上y,然后通過左子樹的函式運行它。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/350104.html
