我處理被定義爲一般的樹設置如下:如何清理級別遍歷函數?
data Tree a = Node a [Tree a] deriving (Eq, Read, Show)
有了這個設置,我創建了打印在樹的特定級別(根是0級,直接節點功能根的孩子是1級等)。這是函數:
level :: Int -> Tree a -> [a]
level 0 (Node a _) = [a]
level n (Node _ subtrees) = concatMap (level (n - 1)) subtrees
使用此功能爲基礎,我創建了一個第二功能,levelorder,打印在水平序遍歷樹的所有節點的列表。該功能目前看起來是這樣的:
levelorder :: Tree a -> [a]
levelorder tree = level 0 tree ++ level 1 tree ++ level 2 tree ++ level 3 tree
雖然這對於目前與我,我想清理,哪裏會與任何大小的樹工作,工作樹的偉大工程。正如你所看到的,它目前只適用於4級(0到3)的樹。我將如何去實現這個目標,我仍然可以利用關卡功能作爲基礎?