我有一个函数,可以按给定顺序(中缀,前缀,后缀和反转中缀,前缀,后缀)将二叉树缩减为节点值列表。下面的代码工作,但我不知道是否有办法做到这一点不只是一个顺序不同的参数重复函数实现6倍:我该如何避免重复类似的表情?
data DOrd = Infix | Praefix | Postfix | GInfix | GPraefix | GPostfix
data BTree = Nil | BNode Int BTree BTree deriving (Eq,Ord,Show)
flatten :: BTree -> DOrd -> [Int]
flatten Nil _ = []
flatten (BNode n b1 b2) Infix = flatten b1 Infix ++ [n] ++ flatten b2 Infix
flatten (BNode n b1 b2) Praefix = [n] ++ flatten b1 Praefix ++ flatten b2 Praefix
---6 times basically the same for all the elements in DOrd
我想过函或基本上延伸深海资源开发有限公司枚举到更复杂的结构 - 但我不知道如何。
TU Vienna? ;-)昨天自己做了。 – firefrorefiddle
@Mike:是的:)我今天也问了导师,他也不知道更好的解决方案。 – mort