У меня есть этот кусок кода, который выводит узлы после прохождения, без какого-либо приемлемого порядка:Haskell - траверс дерева и вывода в списках
preorder :: Tree a -> [a]
preorder Empty = []
preorder (Branch x e d) = [x]++(preorder e)++(preorder d)
createTree = Branch 'A'
(Branch 'B'
(Branch 'E' Empty Empty)
(Branch 'B' Empty Empty)
)
(Branch 'A'
(Branch 'E' Empty Empty)
(Branch 'A' Empty Empty)
)
Применение preorder
к createTree
выходов:
ABEBAEA
То, что я хотел бы иметь, - это список всех путей, идущих от корня:
["ABE","ABB","AAE","AAA"]
Я понятия не имею, как это сделать, я новичок в Haskell!
Благодарим вас за помощь, которая может быть предоставлена.
Я не вижу, что 'функция preorder' имеет отношение к этому. – leftaroundabout
Это приемлемый порядок: префиксный порядок, ther также порядок инфикс и постфикс. Но вы, вероятно, хотите отобразить путь к каждому узлу, поэтому вы, вероятно, (именно так я понял ваш вопрос) также нуждаются в использовании стека для достижения этого. – Yoda
Обратите внимание, что ваш пример не уточняет, какими должны быть пути 'Branch 'A' Empty (Branch 'B' Empty Empty)'. Можно было бы сказать '[" AB "]' или '[" A "," AB "]'. – chi