我有一棵树的结构,我想按级别打印树。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