0
我有這個功能,我寫了從樹傳遞給一個列表在Haskell:TreeToList在Haskell功能
treeToList :: Tree -> [Int]
treeToList (Leaf x) = [x]
treeToList (Node left x right) = treeToList left ++ [x] ++ treeToList right
這一切正常,但是我有一個疑問:
與輸入:
treeToList (Node (Leaf 1) 2 (Node (Leaf 3) 4 (Leaf 5)))
的函數產生該列表:
[1,2,3,4,5]
其中,我認爲是錯誤的,因爲如果我想以相反的方式,並從列表中寫出樹,我會寫錯了。
我該如何解決這個問題?
「寫錯了」的含義並不明顯。我們可以通過很多方式將列表變成樹(同時保持元素的順序)。另外,如果你想「走另一條路」,你將不得不寫一個完全不同的函數,所以我不明白爲什麼這個'treeToList'與此相關。 –
這是不可能的:任何樹訪問(前,後,後)都定義了從樹到列表的非內射映射,因此信息丟失。在韌皮中,您可以實現僞逆,即重建曾經訪問過的許多樹中的一棵,並將輸入列表返回。 – chi
@AndrásKovács所以這是一個將樹轉換爲列表的正確方法? – laker001