我有一棵樹的結構,我想按級別打印樹。Haskell中的水平順序
data Tree a = Nd a [Tree a] deriving Show
type Nd = String
tree = Nd "a" [Nd "b" [Nd "c" [],
Nd "g" [Nd "h" [],
Nd "i" [],
Nd "j" [],
Nd "k" []]],
Nd "d" [Nd "f" []],
Nd "e" [Nd "l" [Nd "n" [Nd "o" []]],
Nd "m" []]]
preorder (Nd x ts) = x : concatMap preorder ts
postorder (Nd x ts) = (concatMap postorder ts) ++ [x]
但如何通過級別來做到這一點? 「水平樹」應該打印[「a」,「bde」,「cgflm」,「hijkn」,「o」]。 我認爲「迭代」將是合適的功能,但我不能想出如何使用它的解決方案。你能幫我嗎?
你不需要'type Nd = String'。它不會在你的代碼中做任何事情,因爲你永遠不會使用類型Nd(你使用類型樹的數據構造函數Nd,但這完全不相關)。 – sepp2k 2010-04-28 18:56:57
我不認爲你想要的結果顯示在表格中:它連接來自相鄰節點的數據的方式,a)如果a不是列表類型,並且b)丟失關於遍歷的信息,則不起作用。考慮這個樹:Nd「a」[Nd「bde」[Nd「cgflm」[Nd「hijkn」[Nd「o」[]]]]] - 它會帶來與您所要求的結果相同的結果。爲了不陷入這個陷阱,使用字符('a')或數字作爲示例樹中的節點值。這將保持你的解決方案很好的一般性。 – MtnViewMark 2010-04-28 21:44:46