Durchwanderung: Binärbäume
Für die Durchwanderung eines
Binärbaumes
betrachten wir ein Beispiel:
ein arithmetischer Ausdruck sei als ein Binärbaum dargestellt,
und wir wollen diesen Binärbaum verstrecken
(manchmal flattening genannt),
also in eine lineare Zeichenfolge überführen,
aus der sich die ursprüngliche Struktur wiedergewinnen läßt.
In der Schreibweise erlauben wir uns im Interesse der Klarheit
einige Freiheiten, und wir setzen Klammern nach Bedarf.
Unsere drei Strategien liefern nun (leicht erweitert wegen der Klammern):
prefix(T) = *( +(a, b), -(c, d))
infix(T) = ((a + b) * (c - d))
postfix(T) = a b + c d - *
-
Die Präfix-Form entspricht der funktionalen Schreibweise:
prefix(T) = prod(sum(a,b),dif(c,d))
oder (* (+ a b) (- c d))
-
Die Infix-Strategie liefert die normale Term-Schreibweise zurück,
mit so vielen Klammern, daß wir auf den Vorrang der Operationen
nicht achten müssen.
-
Die Postfix-Form kommt ganz ohne Klammern aus; deutlicher ist die Variante:
postfix(T) = a b ADD c d SUB MUL
dabei beziehen sich die Operationen
jeweils auf die davor schon eingelesenen Operanden.
Manche Prozessoren arbeiten so
(einschließlich einiger besserer Taschenrechner),
und auch bereits die alten Registrierkassen,
bei denen das Eingeben eines Postens und das anschließende
Saldieren getrennte Aktionen waren.
Die Präfix-Form und die Postfix-Form werden gelegentlich auch
polnische (PN) bzw.
umgekehrte polnische Notation UPN) genannt,
nach dem polnischen Logiker Lukasiewicz,
der sie ca. 1928 eingeführt hat.
Sie kommen ohne Klammern aus,
sofern die Stelligkeit
der Operationen bekannt ist.
Aus den drei Verstreckungen läßt sich der
ursprüngliche Binärbaum schematisch wiedergewinnen;
für die Präfix- und die Postfix-Darstellung
können die Leser vielleicht erraten, wie das geht.
Man braucht als Hilfs-Datenstruktur einen expliziten
Stapel für Zwischenresultate.
zurück |
Inhalt | Index |
vor |
Vorlesung
Klaus Lagally, 22. Februar 2000, 19:36