Das mag sehr naiv sein, aber ich habe mich gefragt, ob es sich um den Kontext von binären Bäumen (einfach, sortiert und ausgeglichen) aller Traversaltypen handelt:
- Tiefen-Vorbestellung
- Tiefe zuerst in der Reihenfolge
- Tiefe zuerst nachbestellen
- Breite zuerst
Was ist der eigentliche Nutzen von Vor- und Nachbestellungen? Ich meine, gibt es einen Typ und / oder eine Konfiguration eines Binärbaums, bei dem das Durchlaufen vor und / oder nach der Bestellung einen Vorteil gegenüber den beiden anderen bietet?
AFAICS, es gibt bestimmte Typen und Konfigurationen von Binärbäumen, für die In-order und Width-First einen bestimmten Vorteil bieten könnten:
Für einen ausgeglichenen Binärbaum wird bei jedem Durchlaufen der Tiefe zuerst weniger Speicherplatz benötigt als bei einem Durchlaufen der Breite zuerst 2 Knoten zu einem bestimmten Zeitpunkt, während die letzte Ebene 3 oder 4 Knoten hat, so dass der erste Durchlauf zu einem bestimmten Zeitpunkt bis zu 3 oder 4 Knoten speichern müsste. In diesem Fall wird bei der Verwendung von In-Order-Traversal am wenigsten Speicherplatz benötigt und die Knoten werden in ihrer natürlichen Reihenfolge besucht.
Für einen nicht ausgeglichenen Binärbaum würde, wenn er sich dem Einfügeszenario des schlechtesten Falls nähert, ein Durchlaufen mit der Breite zuerst weniger Speicherplatz verbrauchen als bei allen Durchläufen mit der Tiefe zuerst. In diesem Fall bietet die Breite zuerst einen Vorteil. In-Order-Traversal hat wiederum den Vorteil, Werte in ihrer natürlichen Reihenfolge zu besuchen.
Ich kann mir jedoch keine Situation vorstellen, in der Vor- und Nachhinein einen Vorteil gegenüber den beiden anderen bieten würden.
quelle
A + B * C
, was für normale Benutzer viel einfacher zu verstehen ist als jedes Präfix der Postfix-Reihenfolge.Der Wikipedia-Artikel enthält eine kurze Beschreibung, wann Sie die verschiedenen Arten der Tiefensuche verwenden möchten:
Es läuft auf die logistischen Anforderungen eines Algorithmus hinaus. Wenn Sie beispielsweise beim Löschen keine Nachbestellungsüberquerung verwenden, verlieren Sie die Referenzen, die Sie zum Löschen der untergeordneten Bäume benötigen.
quelle
Der Sinn verschiedener Algorithmen für den Umgang mit binären Bäumen besteht nicht darin, Dinge mit Bäumen zu tun. Auf dieser abstrakten Ebene ist eine Reihenfolge so gut wie jede andere, da Sie nur abstrakte Symbole aus der Prozedur erhalten.
Aber normalerweise werden Bäume zur Darstellung verwendet interessante Dinge , und das kann einen großen Unterschied im Ergebnis bewirken. Wenn die Knoten beispielsweise Suchzustände in einer vollständigen Suche in einer großen Domäne (möglicherweise sogar in einer unendlichen Domäne) darstellen, bestimmt die Reihenfolge, in der die Ergebnisse gefunden werden, nicht nur, in welcher Reihenfolge, sondern auch, ob dies jemals der Fall sein wird finde überhaupt keine Lösungen . Der Punkt ist bei unendlichen Domänen am einfachsten zu erkennen: Wenn Sie unachtsam absteigen, übersehen Sie möglicherweise eine Lösung, die ganz oben im Baum liegt, einfach, weil Sie eine falsche Wendung eingeschlagen haben. In der Praxis gilt dies jedoch auch für Domänen, die einfach sehr groß und nicht wirklich unendlich sind, da Speicher und Festplatten ebenfalls endlich sind.
quelle