Ich habe einen Typ für einen Baum, wie so:Einen Baum verfolgen?
data Tree a = EmptyTree | Tree a [Tree a] deriving (Show, Ord, Eq)
freeTree :: Tree Integer
freeTree = Tree 2 [Tree 5 [], Tree 6 [Tree 8 [], Tree 9 []], Tree 7 []]
main = print freeTree
Was ich zu tun versuche, eine Funktion zu schreiben, die sagen, wie so verwendet werden könnten:
trace freeTree
Und was für eine Spur auf dieser Baum zurückkehren würde ist: [2],[2,5],[2,6],[2,7],[2,6,8],[2,6,9]
im Grunde, was es tut, ist:
eine Liste von Knoten Halten sie bereits auf den ‚Stapel‘ (die Wurzel nein in jeder Tiefe, die uns hierher gebracht hat). Jedes Mal, wenn Sie einen neuen Knoten erreichen, fügen Sie der Ergebnisliste eine Liste hinzu, bei der es sich um die Liste der Stack-Knoten ++ current_node handelt.
Kann mir jemand einen Rat geben, wie man das macht?
Dank
Entschuldigung, ich kenne die Sprache nicht. Scheint aber wie eine Datenstrukturfrage. Ist das ein binärer Baum? Aber scheint wie ein Baum Traversal, mit der Annahme, 2 ist eine mögliche Wurzel. Und du meinst den Stack als Push jeden Elternknoten beginnend an der Wurzel?also 2 -> 6 -> 8 wäre ein Zweig als [2, 6, 8] korrekt? –
Dies sieht als eine breite erste Suche auf Bäumen. – chi
@chi es ist in der Tat, aber der schwierige Teil ist es, die Route zurückzuverfolgen. – jmasterx