Registriert seit: 13. Dez 2003
Ort: Berlin
1.756 Beiträge
|
Re: VST mit Objekten, Alle Nodes einer Spalte Durchlaufen
25. Mär 2006, 19:01
Hi,
da ich die VST Komponente nicht habe, werde ich dir leider nicht direkt auf deine Frage antworten können. An sich ist es aber natürlich möglich alle Knoten eines Baumes zu besuchen. Man spricht dabei davon, dass man über den Baum traversiert.
Sehr einfach erklären lässt sich der Vorgang an einem Binärbaum (max. 2 Kindknoten). Natürlich gilt alles hier gesagt analog für jeden anderen Baum.
In der Regel ist bei einem Baum der Wurzelknoten bekannt. Dieser kennt wiederum all seine direkten Kinder. Eine Möglichkeit die du nun hast wäre es, den Wurzelknoten zu betrachten, ggf. irgendwas mit dem zu machen und dann rekursiv mit den beiden Kinderknoten weiter zu machen. Wichtig ist hier die Eigenschaft, dass jeder Kindknoten die Wurzel eines Teilbaums ist.
Z.B.
A <- Wurzel des gesamten Baums
B C <- Wurzel des Teilbaums C, F, G
D E F G <- Wurzel des Teilbaums G
Kommst du bei einem Blatt an, so erkennst du es daran, dass es keine Nachfolger / Kindknoten mehr gibt.
Je nachdem wie du durch den Baum traversierst, wirst du unterschiedlich schnell an einem bestimmten Knoten ankommen. Die eine Möglichkeit ist es, dass du dir einen Stack anlegst, auf dem du alle Kinder ablegst, die du für einen Teilbaum findest. Du betrachtest also einen Wurzelknoten, machst was du mit dem machen willst, packst alle Kinder auf den Stack und dann nimmst du das letzte Element vom Stack und betrachtest dieses nun als neuen Wurzelknoten (und gehst analog vor).
Hierbei würdest du dich der Tiefensuche bedienen. Das heißt du würdest jeden Zweig erst bis nach ganz unten laufen, bevor du den Geschwisterknoten betrachtest.
Wenn du statt einem Stack eine Queue benutzt, bei der du hinten anhängst, aber immer das erste Element entfernst, dann würdest du Breitensuche machen. Dass heißt (analog), dass du jede Zeile eines Baumes komplett durchläufst, bevor in einer Tieferen Zeile gesucht wird.
Natürlich kannst du auch den Wurzelknoten zu jedem Zeitpunkt betrachten, vor, nach oder zwischen den Kindknoten.
Aber ich denke dass sollte erstmal reichen.
Ach bevor ich es vergesse, eines möchte ich hier natürlich noch sagen. Du kannst Algorithmen auf Bäume zwar immer sehr leicht und elegant rekursiv erstellen, aber es geht genau so einfach iterativ. Statt einer For-Schleife eignet sich hier viel mehr eine while-Schleife. In dieser musst du nur schauen, ob es in deiner Liste (Queue oder Stack) noch mindestens ein Element gibt, wenn ja, dann ...
Zur Initialisierung muss natürlich nur das Wurzelelement des Baumes den du betrachtest in eben diese Liste.
Gruß Der Unwissende
|