首先,我有一个有序树的数据类型:
dfsTreeList :: OrdTree a -> [a]
dfsTreeList (OrdTree a (x:xt)) = a : (dfsTreeList x) ++ (dfsTreeList (OrdTree a xt))
dfsTreeList (OrdTree a []) = a : []
我需要按照DFS(深度优先搜索)的顺序获取所有节点的列表。
我试图解决这个问题:
dfsTreeList (OrdTree 7 [(OrdTree 3 [(OrdTree 1 []), (OrdTree 4 [])]), (OrdTree 10 [(OrdTree 8 []), (OrdTree 12 [])])])
但是出现了一个新问题:每个非最后一个节点都包含在列表中两次。
例如,输入数据:
[7,3,1,3,4,3,7,10,8,10,12,10,7]
结果:
C MOVEL TEST TESTFELD
有人有什么想法吗?谢谢你的回复。
答案 0 :(得分:3)
下面
puzzleArray = new char[numRows][numRows];
您正在复制dfsTreeList (OrdTree a (x:xt)) = a : (dfsTreeList x) ++ (dfsTreeList (OrdTree a xt))
。您可以尝试将该函数应用于列表中的每个子树,例如
a
您也可以使用dfsTreeList (OrdTree a xs) = a : concat (map dfsTreeList xs)
或concatMap
来达到同样的效果。