Durchwanderung: Wald und Binärbäume
Bei der Durchwanderung eines
Binärbaumes
müssen wir, um alle Knoten zu finden,
die Wurzel eines Teilbaumes in der Regel mehrmals
besuchen,
und wir können noch auswählen,
wann wir sie dabei bearbeiten wollen.
Dabei sind mehrere Strategien gebräuchlich,
die etwa gleich wichtig sind:
- die Präfix-Strategie:
die Wurzel wird vor den Unterbäumen bearbeitet,
- die Infix-Strategie:
die Wurzel wird zwischen den Unterbäumen bearbeitet,
- die Postfix-Strategie:
die Wurzel wird nach den Unterbäumen bearbeitet.
Man könnte noch nach der Reihenfolge der Unterbäume
differenzieren; meist lohnt sich das nicht.
Die drei Strategien sind unmittelbar auszuprogrammieren:
PROCEDURE prefix(b: btree; p: Bearbeiter);
BEGIN IF b <> NIL
THEN p(b); (* bearbeite die Wurzel *)
prefix(b^.left, p); (* besuche l. UB *)
prefix(b^.right, p); (* besuche r. UB *)
END;
END prefix;
Dabei ist der Parameter p eine beliebige passende
Bearbeitungs-Prozedur.
Die Strategien infix und postfix
gehen sinngemäß ebenso.
Auch für allgemeine Bäume und Wälder
lassen sich entsprechende Durchwanderungsstrategien definieren,
(eine Infix-Strategie macht allerdings keinen Sinn),
und erfreulicherweise besteht eine enge Beziehung zu den
Durchwanderungen des äquivalenten
Binärbaumes:
-
die Präfix-Durchwanderung des Binärbaumes
bearbeitet jeden Knoten vor seinen Nachkommen
und vor seinen jüngeren Geschwistern,
ist also auch eine Präfix-Strategie,
-
die Infix-Durchwanderung des Binärbaumes
bearbeitet jeden Knoten nach seinen Nachkommen
und vor seinen jüngeren Geschwistern,
ist also hier eine Postfix-Strategie,
-
die Postfix-Durchwanderung des Binärbaumes
bearbeitet jeden Knoten nach seinen Nachkommen
und nach seinen jüngeren Geschwistern,
ist also ebenfalls eine Postfix-Strategie,
allerdings mit anderer Reihenfolge der Geschwister.
zurück |
Inhalt | Index |
vor |
Vorlesung
Klaus Lagally, 22. Februar 2000, 19:36