基本上,我試圖將串列中的元素一一插入到二叉樹中,或者這就是我認為在將串列插入樹時應該做的事情。
這是我的插入樹:
data Tree = EmptyTree | Node Integer Tree Tree deriving (Show, Eq, Ord)
insertElement x EmptyTree = Node x EmptyTree EmptyTree
insertElement x (Node a left right) = if x == a
then (Node x left right)
else if x < a
then (Node a (insertElement x left) right)
else
Node a left (insertElement x right)
我想我可以使用 map 從串列中獲取元素并將其插入到串列中。
像這樣:inserter x = map (insertElement x EmptyTree)
我用插入器獲取串列并將其插入到串列中。
但是,我認為這段代碼非常不正確,我想知道我該怎么做?
uj5u.com熱心網友回復:
如果您會使用inserter xs = map (`insertElement` EmptyTree),您將創建一個樹串列,其中每個專案都插入一次。
您可以做的是使用foldl :: Foldable t => (b -> a -> b) -> b -> t a -> borfoldr :: Foldable t => (a -> b -> b) -> b -> t a -> b每次通過累加器,到目前為止的建立串列,從而插入下一個專案,所以:
inserter :: Foldable f => f Integer -> Tree
inserter = foldr insertElement EmptyTree
或者:
inserter :: Foldable f => f Integer -> Tree
inserter = foldl (flip insertElement) EmptyTree
然而,允許指定基礎樹可能更有意義,因此可以使用將專案inserter插入到可能已經包含專案的專案中,例如:FoldableTree
inserter :: Foldable f => Tree -> f Integer -> Tree
inserter = foldl (flip insertElement)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/462819.html
上一篇:從邊串列中查找連通分量
下一篇:如何定義可重疊的依賴實體?
