Binärbaum

A labeled binary tree of size 9 and height 3, with a root node whose value is 1. The above tree is unbalanced and not sorted.
Ein markierter binärer Baum mit Größe 9 und Höhe 3 mit einem Wurzelknoten, dessen Wert 1. Der obige Baum ist unausgeglichen und nicht sortiert.

Im Informatik, a Binärbaum ist ein Baumdatenstruktur in dem jeder Knoten höchstens zwei hat Kinder, die als die bezeichnet werden Linke Kind und die Richtiges Kind. EIN rekursive Definition nur verwenden Mengenlehre Vorstellungen ist, dass ein (nicht leerer) binärer Baum a ist Tupel (L, S, R), wo L und R sind binäre Bäume oder die leeres Set und S ist ein Singleton -Set die Wurzel enthalten.[1] Einige Autoren lassen den binären Baum auch das leere Set sein.[2]

Von einem Graphentheorie Perspektive sind binäre (und k-ary) Bäume, wie es hier definiert ist Laube.[3] Ein binärer Baum kann somit auch als a genannt werden Bifurcating Arboreszenz[3]- Ein Begriff, der in einigen sehr alten Programmierbüchern erscheint,[4] Bevor die moderne Informatik -Terminologie herrschte. Es ist auch möglich, einen binären Baum als einen zu interpretieren ungerichtet, eher als ein gerichteter GraphIn diesem Fall ist ein binärer Baum ein bestellt, verwurzelter Baum.[5] Einige Autoren verwenden verwurzelter binärer Baum Anstatt von Binärbaum Um die Tatsache zu betonen, dass der Baum verwurzelt ist, aber wie oben definiert, ist immer ein binärer Baum verwurzelt.[6] Ein binärer Baum ist ein Sonderfall eines bestellten Falles K-Ary-Baum, wo K ist 2.

In der Mathematik, was bezeichnet wird Binärbaum kann von Autor zu Autor erheblich variieren. Einige verwenden die in der Informatik üblicherweise verwendete Definition,[7] Andere definieren es jedoch als jede Nicht-Blatt, die genau zwei Kinder hat, und bestellen auch nicht unbedingt (links/rechts) die Kinder.[8]

Beim Computer werden binäre Bäume auf zwei sehr unterschiedliche Arten verwendet:

  • Erstens als Mittel zum Zugriff auf Knoten basierend auf einem Wert oder einer Etikett, die jedem Knoten zugeordnet ist.[9] Binärbäume, die auf diese Weise gekennzeichnet sind, werden zur Implementierung verwendet Binäre Suchbäume und Binäre Haufenund werden für effizient verwendet Suche und Sortierung. Die Bezeichnung von Nicht-Root-Knoten als links oder rechts Kind, selbst wenn in einigen dieser Anwendungen nur ein Kind vorhanden ist, insbesondere in binären Suchbäumen ist es von Bedeutung.[10] Die Anordnung bestimmter Knoten in den Baum ist jedoch nicht Teil der konzeptionellen Informationen. Zum Beispiel hängt die Platzierung von Knoten in einem normalen binären Suchbaum fast ausschließlich von der Reihenfolge ab, in der sie hinzugefügt wurden, und kann neu arrangiert werden (zum Beispiel durch ausbalancieren) ohne die Bedeutung zu ändern.
  • Zweitens als Darstellung von Daten mit einer relevanten Bifurcationsstruktur. In solchen Fällen ist die besondere Anordnung von Knoten unter und/oder links oder rechts anderer Knoten Teil der Informationen (dh sie würde die Bedeutung ändern). Häufige Beispiele treten mit mit Huffman -Codierung und Cladogramme. Die alltägliche Aufteilung von Dokumenten in Kapitel, Abschnitte, Absätze usw. ist ein analoges Beispiel mit N-Ary und nicht mit Binärbäumen.

Definitionen

Rekursive Definition

Um einen binären Baum im Allgemeinen tatsächlich zu definieren, müssen wir die Möglichkeit zulassen, dass nur eines der Kinder leer sein kann. Ein Artefakt, das in einigen Lehrbüchern als als genannt wird erweiterter binärer Baum, wird für diesen Zweck benötigt. Ein erweiterter binärer Baum wird somit rekursiv definiert als:[11]

  • das leeres Set ist ein erweiterter binärer Baum
  • Wenn t1 und T2 sind verlängerte binäre Bäume, dann durch t bezeichnet1 • T2 der ausgedehnte binäre Baum, der durch erhalten wurde durch Hinzufügen eines Wurzels r nach links nach t angeschlossen1 und rechts auf t2[Klarstellung erforderlich Wohin ging das 'r' in das 't?1 • T2'Symbol] Durch Hinzufügen von Kanten, wenn diese Unterbäume nicht leer sind.

Eine andere Möglichkeit, sich diese Konstruktion vorzustellen (und die Terminologie zu verstehen), besteht darin, anstelle des leeren Setzens einen anderen Knotentyp zu berücksichtigen - zum Beispiel quadratische Knoten, wenn die regulären Kreise sind.[12]

Verwenden von Graphentheoriekonzepten

Ein binärer Baum ist ein verwurzelter Baum das ist auch ein Ordnungsbedingt Baum (a.k.a. Flugzeugbaum), in dem jeder Knoten höchstens zwei Kinder hat. Ein verwurzeltes Baum verleiht natürlich einen Begriff der Ebenen (Entfernung von der Wurzel), daher kann für jeden Knoten ein Begriff der Kinder definiert werden, als die mit ihm verbundenen Knoten eine Ebene unten. Die Bestellung dieser Kinder (z. B. durch das Zeichnen von auf einer Ebene) ermöglicht es, ein linkes Kind von einem rechten Kind zu unterscheiden.[13] Dies unterscheidet jedoch immer noch nicht zwischen einem Knoten mit links, aber keinem rechten Kind von einem mit rechts, aber keinem linken Kind.

Die notwendige Unterscheidung kann getroffen werden, indem zuerst die Kanten verteilt werden, d. H. Den Binärbaum als Triplett definieren (v, e1, E2), wo (v, e1 ∪ e2) ist ein verwurzeltes Baum (gleichwertig Arboreszenz) und e1 ∩ e2 ist leer und erfordert das auch für alle j ∈ {1, 2} Jeder Knoten hat höchstens ein ej Kind.[14] Eine informelle Art, die Unterscheidung zu treffen, besteht darin Enzyklopädie der Mathematik, dass "jeder Knoten ein linkes Kind hat, ein rechtes Kind, weder noch beides" und zu spezifizieren, dass diese "alle unterschiedliche" binäre Bäume sind.[7]

Arten von Binärbäumen

Die Baumterminologie ist nicht gut standardisiert und variiert daher in der Literatur.

  • A verwurzelt binär Baum hat ein Wurzelknoten Und jeder Knoten hat höchstens zwei Kinder.
Ein voller binärer Baum
Ein Vorfahren die einem perfekten Binärbaum mit 4-Stufen zugeordnet werden können.
  • A voll binärer Baum (manchmal als als als bezeichnet richtig[15] oder Flugzeug oder strikt Binärbaum)[16][17] ist ein Baum, bei dem jeder Knoten entweder 0 oder 2 Kinder hat. Eine andere Möglichkeit, einen vollen binären Baum zu definieren, ist a rekursive Definition. Ein vollständiger binärer Baum ist entweder:[11]
    • Ein einzelner Scheitelpunkt.
    • Ein Baum, dessen Wurzelknoten zwei Unterbaume hat, die beide volle binäre Bäume sind.
  • A perfekt Binärbaum ist ein binärer Baum, bei dem alle Innenknoten zwei Kinder haben und Alle Blätter haben das gleiche Tiefe oder gleich eben.[18] Ein Beispiel für einen perfekten Binärbaum ist das (nicht inklinitur) Vorfahren von einer Person in eine bestimmte Tiefe, da jede Person genau zwei leibliche Eltern (eine Mutter und einen Vater) hat. Vorausgesetzt, das Ancestry -Diagramm zeigt immer die Mutter und den Vater auf der gleichen Seite für einen bestimmten Knoten, kann ihr Geschlecht als Analogie der linken und rechten Kinder angesehen werden. Kinder hier als algorithmischer Begriff verstanden werden.
  • A Komplett Binärbaum ist ein binärer Baum, in dem jede Ebene, außer möglicherweise der letzte, ist vollständig gefüllt und alle Knoten in der letzten Ebene sind so weit wie möglich links. Es kann zwischen 1 und 2 habenh Knoten auf der letzten Ebene h.[19] Ein perfekter Baum ist daher immer vollständig, aber ein kompletter Baum ist nicht unbedingt perfekt. Eine alternative Definition ist ein perfekter Baum, dessen rechts (vielleicht alle) entfernt wurden. Einige Autoren verwenden den Begriff Komplett sich stattdessen auf a beziehen perfekt Binärer Baum wie oben definiert, in diesem Fall nennen sie diese Art von Baum (mit einer möglicherweise nicht gefüllten letzten Ebene) und Fast fertig binärer Baum oder Fast vollständig Binärbaum.[20][21] Ein vollständiger binärer Baum kann mit einem Array effizient dargestellt werden.[19]
Ein vollständiger binärer Baum (das ist nicht voll)
  • In dem unendlich vollständig Binärbaum, jeder Knoten hat zwei Kinder (und so ist der Satz von Ebenen Zähler Unendlich unendlich). Der Satz aller Knoten ist zählbar unendlich, aber der Satz aller unendlichen Pfade der Wurzel ist unzählige, die die Kardinalität des Kontinuums. Das liegt daran, dass diese Pfade durch eine Bestellvorstellung entsprechen Bijection zu den Punkten der Cantor -Set, oder (unter Verwendung des Beispiels von a Stern -Brocot -Baum) auf den positiven Satz irrationale Zahlen.
  • A ausgewogen Binärbaum ist eine binäre Baumstruktur, in der sich die linken und rechten Unterbälde jedes Knotens um nicht mehr als 1 in der Höhe unterscheiden.[22] Man kann auch Binärbäume betrachten, bei denen kein Blatt viel weiter von der Wurzel entfernt ist als jedes andere Blatt. (Unterschiedliche Balanceschemata ermöglichen unterschiedliche Definitionen von "viel weiter".[23])
  • A degenerieren (oder pathologisch) Der Baum ist dort, wo jeder übergeordnete Knoten nur einen zugeordneten untergeordneten Knoten hat.[24] Dies bedeutet, dass sich der Baum wie a verhalten wird verlinkte Liste Datenstruktur.

Eigenschaften von Binärbäumen

  • Die Anzahl der Knoten in einem vollen binären Baum ist mindestens und höchstens , wo ist der Höhe des Baumes. Ein Baum, der nur aus einem Wurzelknoten besteht, hat eine Höhe von 0.
  • Die Anzahl der Blattknoten in einem perfekten binären Baum ist, ist Weil die Anzahl der nicht-blatt- (a.k.a. internen) Knoten .
  • Dies bedeutet, dass ein vollständiger binärer Baum mit Blätter hat Knoten.
  • In einem ausgewogen Voller binärer Baum, (sehen Deckenfunktion).
  • In einem perfekt Voller binärer Baum, daher .
  • Die Anzahl der Nullverbindungen (d. H. Fehlende Kinder der Knoten) in einem binären Baum von n Knoten ist (n+1).
  • Die Anzahl der internen Knoten in a Komplett binärer Baum von n Knoten ist .
  • Für jeden nicht leeren Binärbaum mit n0 Blattknoten und n2 Knoten von Grad 2, n0 = n2 + 1.[25]

Kombinatorik

Im Kombinatorik Man berücksichtigt das Problem, die Anzahl der vollen binären Bäume einer bestimmten Größe zu zählen. Hier haben die Bäume keine Werte an ihren Knoten (dies würde nur die Anzahl der möglichen Bäume mit einem leicht bestimmten Faktor multiplizieren), und Bäume werden nur durch ihre Struktur unterschieden. Das linke und rechte Kind eines Knotens wird jedoch unterschieden (wenn es sich um unterschiedliche Bäume handelt, erzeugt es einen Baum, der sich vom ursprünglichen unterscheidet). Die Größe des Baumes ist die Zahl n von inneren Knoten (diejenigen mit zwei Kindern); Die anderen Knoten sind Blattknoten und es gibt n + 1 von ihnen. Die Anzahl solcher binären Größenbäume n entspricht der Anzahl der Möglichkeiten, eine Zeichenfolge von vollständig zu klammern n + 1 Symbole (darstellen Blätter) getrennt durch n Binäroperatoren (darstellen interne Knoten), um die Argument -Subexpressionen jedes Operators zu bestimmen. Zum Beispiel für n = 3 Man muss eine Zeichenfolge wie ein Klammern wie , was auf fünf Arten möglich ist:

Die Korrespondenz mit binären Bäumen sollte offensichtlich sein, und die Zugabe von redundanten Klammern (um einen bereits parenthäzierten Ausdruck oder um den vollen Ausdruck) wird nicht zugelassen (oder zumindest nicht als neue Möglichkeit erzeugt).

Es gibt einen einzigartigen binären Baum mit Größe 0 (bestehend aus einem einzigen Blatt), und jeder andere binäre Baum ist durch das Paar linker und rechter Kinder gekennzeichnet. Wenn diese Größen haben i und j Der volle Baum hat jeweils Größe i + j + 1. Daher die Zahl von binären Bäumen der Größe n hat die folgende rekursive Beschreibung , und für jede positive Ganzzahl n. Es folgt dem ist der Katalanische Nummer des Index n.

Die obigen Klammern sollten nicht mit den Wörtern der Länge 2 verwechselt werdenn in dem Dyck -Sprache, die nur aus Klammern bestehen, so dass sie richtig ausgeglichen sind. Die Anzahl solcher Zeichenfolgen erfüllt die gleiche rekursive Beschreibung (jedes Dyck -Wort der Länge 2n wird durch das DYCK -Subword bestimmt, das durch die Anfangsaufnahme ('und seine Matching') 'zusammen mit dem Dyck -Subword nach dieser schließenden Klammung verbleibt, deren Längen 2 verbleibti und 2j erfüllen i + j + 1 = n); Diese Zahl ist daher auch die katalanische Zahl . Es gibt also auch fünf Dyck -Wörter mit Länge 6:

() () (), () (()), ()) (), () ()), (()))

Diese Dyck -Wörter entsprechen nicht auf die gleiche Weise Binärbäumen. Stattdessen werden sie durch die folgende rekursiv definierte Bijektion verwandt: Das Dyck -Wort entspricht dem leeren Zeichenfolge dem binären Baum von Größe 0 mit nur einem Blatt. Jedes andere Dyck -Wort kann geschrieben werden als (), wo , sind selbst (möglicherweise leer) Dyck -Wörter und wo die beiden geschriebenen Klammern übereinstimmen. Die Bijektion wird dann definiert, indem die Wörter zugelassen werden und entsprechen den binären Bäumen, die die linken und rechten Kinder der Wurzel sind.

Eine bijektive Korrespondenz kann auch wie folgt definiert werden Lispeln Listenausdruck (mit der leeren Liste () als nur vorkommendes Atom); dann ist die gepunktete Pair Der Ausdruck für diese ordnungsgemäße Liste ist ein vollklammernder Ausdruck (mit NIL als Symbol und '. Als Operator), der den entsprechenden binären Baum beschreibt (was tatsächlich die interne Darstellung der richtigen Liste ist).

Die Fähigkeit, binäre Bäume als Zeichenfolgen von Symbolen und Klammern darzustellen, impliziert, dass binäre Bäume die Elemente von a darstellen können Freies Magma auf einem Singleton -Set.

Methoden zur Lagerung binärer Bäume

Binärbäume können aus konstruiert werden Programmiersprache Primitive in mehrfacher Hinsicht.

Knoten und Referenzen

In einer Sprache mit Aufzeichnungen und VerweiseBinärbäume werden typischerweise durch eine Baumknotenstruktur konstruiert, die einige Daten und Verweise auf das linke Kind und das rechte Kind enthält. Manchmal enthält es auch einen Verweis auf seinen einzigartigen Elternteil. Wenn ein Knoten weniger als zwei Kinder hat, können einige der Kinderzeiger auf einen besonderen Nullwert oder auf einen Spezialwert eingestellt werden Sentinel -Knoten.

Diese Methode zur Aufbewahrung von binären Bäumen verschwendet ein bisschen Gedächtnis, da die Zeiger mehr als die Hälfte der Zeit null sind (oder auf den Sentinel zeigen); Eine konservativere Repräsentationsalternative ist Binärbaum mit Gewinde.[26]

In Sprachen mit Markierte Gewerkschaften wie zum Beispiel Ml, ein Baumknoten ist oft eine markierte Vereinigung von zwei Arten von Knoten, von denen einer ein 3-Tupel Daten, links und das rechte Kind ist, und der andere ein "Blatt" -Knoten, der keine Daten enthält und enthält und keine Daten enthält und Funktionen ähnlich dem Nullwert in einer Sprache mit Zeigern. Zum Beispiel die folgende Codezeile in Ocaml (Ein ML -Dialekt) definiert einen binären Baum, der ein Zeichen in jedem Knoten speichert.[27]

Typ chr_tree = Leer | Knoten von verkohlen * chr_tree * chr_tree 

Arrays

Binärbäume können auch in Breite in der ersten Reihenfolge gelagert werden implizite Datenstruktur in Arraysund wenn der Baum ein vollständiger binärer Baum ist, verschwendet diese Methode keinen Raum. In dieser kompakten Anordnung, wenn ein Knoten einen Index hat i, seine Kinder werden bei Indizes gefunden (für das linke Kind) und (für das Recht), während sein Elternteil (falls vorhanden) im Index gefunden wird (Angenommen, das Root hat Index Null). Alternativ wird die Implementierung mit einem 1-idexierten Array mit Kindern vereinfacht und und Eltern gefunden bei .[28] Diese Methode profitiert von einer kompakteren Speicherung und besser Referenzortinsbesondere während einer Vorbestellung. Es ist jedoch teuer zu wachsen und verschwendet den Raum proportional zu 2h - n für einen Baum der Tiefe h mit n Knoten.

Diese Speichermethode wird häufig für verwendet Binäre Haufen.

A small complete binary tree stored in an array

Codierungen

Prägnante Codierungen

A Prägnante Datenstruktur ist einer, der fast minimal möglichem Raum einnimmt, wie durch festgelegt von Information theoretisch Untergrenzen. Die Anzahl verschiedener binärer Bäume auf Knoten ist , das th Katalanische Nummer (Angenommen, wir sehen Bäume mit identisch Struktur als identisch). Für große , es geht um ; Somit brauchen wir zumindest ungefähr Bits, um es zu codieren. Ein prägnanter binärer Baum würde daher besetzen Bits.

Eine einfache Darstellung, die dieser Grenze erfüllt, besteht darin, die Knoten des Baumes in Vorbestellung zu besuchen und "1" für einen internen Knoten und "0" für ein Blatt auszugeben.[29] Wenn der Baum Daten enthält, können wir sie einfach gleichzeitig in einem aufeinanderfolgenden Array in Vorbestellung speichern. Diese Funktion erfüllt dies:

Funktion Codesuccincinct (Knoten n, Bitstring Struktur, Array Daten) { wenn n = Null dann         Anhängen 0 an Struktur; anders         Anhang 1 an strukturieren; N.Data an Daten anhängen; Codesuccincinct (N.Left, Struktur, Daten); Codesuccincinct (N.Right, Struktur, Daten); }

Die Saite Struktur hat nur Bits am Ende, wo ist die Anzahl der (internen) Knoten; Wir müssen nicht einmal seine Länge speichern. Um zu zeigen, dass keine Informationen verloren gehen, können wir die Ausgabe in den ursprünglichen Baum wie diesen zurückkehren:

Funktion Decodesuccincinct (Bitstring Struktur, Array Daten) {Erstes Bit von entfernen Struktur und stecken Sie es hinein b  wenn B = 1 dann         Erstellen Sie einen neuen Knoten nEntfernen Sie das erste Datenelement und setzen Sie es in n.data n.left = decodesuccincinct (Struktur, Daten) n.right = decodesuccinct (Struktur, Daten). Rückkehr n anders  Rückkehr nil}

Ausgefugtere prägnanter Darstellungen ermöglichen nicht nur eine kompakte Aufbewahrung von Bäumen, sondern auch nützliche Operationen auf diesen Bäumen direkt, während sie sich noch in ihrer prägnanten Form befinden.

Codierung allgemeiner Bäume als Binärbäume

Es gibt eine Eins-zu-Eins-Kartierung zwischen allgemeinen geordneten Bäumen und binären Bäumen, die insbesondere von verwendet werden von Lispeln allgemein geordnete Bäume als binäre Bäume darstellen. Um einen allgemein geordneten Baum in einen binären Baum umzuwandeln, müssen wir nur den allgemeinen Baum in der rechten Geschwindigkeit des linken Kindes darstellen. Das Ergebnis dieser Darstellung ist automatisch ein binärer Baum, wenn es aus einer anderen Perspektive betrachtet wird. Jeder Knoten N im geordneten Baum entspricht einem Knoten N' im binären Baum; das links Kind von N' ist der Knoten, der dem ersten Kind von entspricht N, und die Rechts Kind von N' Ist der Knoten entsprechend zu N'S NEXT-Geschwister-das heißt, der nächste Knoten, um unter den Kindern des Elternteils von zu ordnen N. Diese binäre Baumpräsentation eines allgemeinen Ordnungbaums wird manchmal auch als als bezeichnet Binärer Binär des linken Kindes mit dem linken Kind (Auch als LCRS-Baum, doppelt verketteter Baum, Filialheir-Kette).

Eine Möglichkeit, darüber nachzudenken, ist, dass die Kinder jedes Knotens in einem sind verlinkte Liste, zusammen mit ihren gekettet Rechts Felder und der Knoten hat nur einen Zeiger auf den Anfang oder Kopf dieser Liste, über seine links aufstellen.

Zum Beispiel hat A im Baum links die 6 Kinder {b, c, d, e, f, g}. Es kann rechts in den binären Baum umgewandelt werden.

An example of converting an n-ary tree to a binary tree

Der binäre Baum kann als der ursprüngliche Baum seitlich geneigt werden, wobei die schwarzen linken Kanten darstellen erstes Kind und die blauen rechten Kanten, die darstellen nächstes Geschwister. Die Blätter des Baumes links wären in LiSP als:

(((N o) i j) c d ((p) (q)) f (m))

Dies würde im Gedächtnis als Binärbaum auf der rechten Seite implementiert werden, ohne Buchstaben auf den Knoten mit einem linken Kind.

Gemeinsame Operationen

Baumrotationen sind sehr häufige interne Operationen auf selbstausgleichende binäre Bäume.

Es gibt eine Vielzahl verschiedener Operationen, die an binären Bäumen ausgeführt werden können. Einige sind Mutator Operationen, während andere einfach nützliche Informationen über den Baum zurückgeben.

Einfügen

Knoten können zwischen zwei anderen Knoten in binäre Bäume eingeführt oder nach a hinzugefügt werden Blattknoten. In binären Bäumen wird ein eingefügter Knoten angegeben, wessen Kind es sein wird.

Blattknoten

Um einen neuen Knoten nach Blattknoten A hinzuzufügen, weist A den neuen Knoten als eines seiner Kinder zu, und der neue Knoten weist den Knoten A als übergeordnetes zu.

Interne Knoten

Der Prozess des Einsetzens eines Knotens in einen binären Baum

Einfügen auf interne Knoten ist etwas komplexer als bei Blattknoten. Sagen Sie, dass der interne Knoten Knoten A ist und dass Knoten B das Kind von A ist (wenn das Einfügen ein rechtes Kind einfügt, dann ist B das rechte Kind von A und ähnlich mit einem linken Kind.) A weist seine zu. Child zum neuen Knoten und der neue Knoten weist sein Elternteil A zu A zu. Dann weist der neue Knoten sein Kind B und B seinen übergeordneten über den neuen Knoten zu.

Streichung

Löschung ist der Prozess, bei dem ein Knoten aus dem Baum entfernt wird. Nur bestimmte Knoten in einem binären Baum können eindeutig entfernt werden.[30]

Knoten mit Null oder einem Kinder

Der Prozess des Löschens eines internen Knotens in einem binären Baum

Nehmen wir an, dass der zu löschende Knoten Node A ist. Wenn A keine Kinder hat Null. Wenn A ein Kind hat, setzen Sie den Elternteil des Kindes von A auf A's Elternteil und setzen Sie das Kind des Elternteils von A auf das Kind von A.

Knoten mit zwei Kindern

In einem binären Baum kann ein Knoten mit zwei Kindern nicht eindeutig gelöscht werden.[30] In bestimmten binären Bäumen (einschließlich Binäre Suchbäume) Diese Knoten kann gelöscht werden, allerdings mit einer Umlagerung der Baumstruktur.

Durchqueren

Vorbestellung, in Ordnung und nach der Bestellung nach dem Bestellverfahren jeden Knoten in einem Baum besuchen, indem Sie jeden Knoten in den linken und rechten Teilbäumen der Wurzel rekursiv besuchen.

Tiefe-First-Ordnung

In der ersten Reihenfolge versuchen wir immer, den Knoten am weitesten vom Wurzelknoten zu besuchen, den wir können, aber mit der Einschränkung, dass es sich um ein Kind eines Knotens handelt, den wir bereits besucht haben. Im Gegensatz zu einer Tiefensuche in Diagrammen müssen Sie sich nicht an alle Knoten erinnern, die wir besucht haben, da ein Baum keine Zyklen enthalten kann. Vorbestellung ist ein Sonderfall davon. Sehen Tiefe-First-Suche für mehr Informationen.

Breite erste Ordnung

Im Gegensatz zur Tiefenordnung steht die Reihenfolge der Breite, die immer versucht, den Knoten zu besuchen, der der Wurzel am nächsten liegt, die er noch nicht besucht hat. Sehen Breite-First-Suche für mehr Informationen. Auch a genannt Traversal der Ebene.

In einem vollständigen binären Baum, die Breite eines Knotens (BREIT-Index () (i - (2d - 1)) kann als Traversalanweisungen von der Wurzel verwendet werden. Bitweise von links nach rechts lesen, beginnend bei Bit d - 1, wo d ist der Abstand des Knotens von der Wurzel (d = ⌊Log2(i+1) ⌋) und der fragliche Knoten ist nicht die Wurzel selbst (d > 0). Wenn der Breite-Index bei Bit maskiert ist d - 1, die Bitwerte 0 und 1 bedeuten, entweder nach links bzw. rechts zu treten. Der Prozess setzt sich fort, indem er das nächste Bit nach rechts überprüft, bis es nicht mehr gibt. Das bis rechtliche Bit zeigt den endgültigen Durchlauf des übergeordneten Elternteils des gewünschten Knotens zum Knoten selbst an. Auf diese Weise gibt es einen Zeitraum-Kompromiss zwischen der Iterie eines vollständigen binären Baums im Vergleich zu jedem Knoten mit Zeiger/s auf seine Geschwister/s.

Siehe auch

Verweise

Zitate

  1. ^ Rowan Garnier; John Taylor (2009). Diskrete Mathematik: Beweise, Strukturen und Anwendungen, dritte Ausgabe. CRC Press. p. 620. ISBN 978-1-4398-1280-8.
  2. ^ Stevens Skiena (2009). Das Algorithmus -Designhandbuch. Springer Science & Business Media. p. 77. ISBN 978-1-84800-070-4.
  3. ^ a b Knuth (1997). Die Kunst der Computerprogrammierung, Band 1, 3/e. Pearson Ausbildung. p. 363. ISBN 0-201-89683-4.
  4. ^ Iván Flores (1971). Computerprogrammiersystem/360. Prentice-Hall. p. 39.
  5. ^ Kenneth Rosen (2011). Diskrete Mathematik und ihre Anwendungen, 7. Auflage. McGraw-Hill Science. p. 749. ISBN 978-0-07-338309-5.
  6. ^ David R. Mazur (2010). Kombinatorik: Eine geführte Tour. Mathematische Vereinigung von Amerika. p. 246. ISBN 978-0-88385-762-5.
  7. ^ a b "Binärbaum", Enzyklopädie der Mathematik, EMS Press, 2001 [1994] auch in gedruckter gedruckter als Michiel HaMewinkel (1997). Enzyklopädie der Mathematik. Ergänzung i. Springer Science & Business Media. p. 124. ISBN 978-0-7923-4709-5.
  8. ^ L.R. Foulds (1992). Graphentheorieanwendungen. Springer Science & Business Media. p. 32. ISBN 978-0-387-97599-3.
  9. ^ David Makinson (2009). Sets, Logik und Mathematik für das Computer. Springer Science & Business Media. p. 199. ISBN 978-1-84628-845-6.
  10. ^ Jonathan L. Gross (2007). Kombinatorische Methoden mit Computeranwendungen. CRC Press. p. 248. ISBN 978-1-58488-743-0.
  11. ^ a b Kenneth Rosen (2011). Diskrete Mathematik und ihre Anwendungen 7. Ausgabe. McGraw-Hill Science. S. 352–353. ISBN 978-0-07-338309-5.
  12. ^ Te Chiang Hu; Man-Tak Shing (2002). Kombinatorische Algorithmen. Courier Dover Publications. p. 162. ISBN 978-0-486-41962-6.
  13. ^ Lih-hsing hsu; Cheng-Kuan Lin (2008). Graphentheorie und Verbindungsnetzwerke. CRC Press. p. 66. ISBN 978-1-4200-4482-9.
  14. ^ J. Flum; M. Grohe (2006). Parametrisierte Komplexitätstheorie. Springer. p. 245. ISBN 978-3-540-29953-0.
  15. ^ Tamassia, Michael T. Goodrich, Roberto (2011). Algorithmus -Design: Grundlagen, Analysen und Internetbeispiele (2 ed.). Neu-Delhi: Wiley-India. p. 76. ISBN 978-81-265-0986-7.
  16. ^ "Voller binärer Baum". NIST.
  17. ^ Richard Stanley, Enumerative Kombinatorik, Band 2, S. 36
  18. ^ "Perfekter binärer Baum". NIST.
  19. ^ a b "Vollständiger binärer Baum". NIST.
  20. ^ "Fast vollständiger binärer Baum". Archiviert von das Original am 2016-03-04. Abgerufen 2015-12-11.
  21. ^ "Fast vollständiger binärer Baum" (PDF).
  22. ^ Aaron M. Tenenbaum, et al. Datenstrukturen mit C, Prentice Hall, 1990 ISBN0-13-199746-7
  23. ^ Paul E. Black (Hrsg.), Eintrag für Datenstruktur in Wörterbuch von Algorithmen und Datenstrukturen. UNS. Nationales Institut für Standards und Technologie. 15. Dezember 2004. Online Version Archiviert 21. Dezember 2010 bei der Wayback -Maschine Zugriff auf 2010-12-19.
  24. ^ Parmar, Anand K. (2020-01-22). "Verschiedene Arten von binärem Baum mit farbenfrohen Illustrationen". Mittel. Abgerufen 2020-01-24.
  25. ^ Mehta, Dinesh; Sartaj Sahni (2004). Handbuch mit Datenstrukturen und Anwendungen. Chapman und Hall. ISBN 1-58488-435-5.
  26. ^ D. Samanta (2004). Klassische Datenstrukturen. PHI -Lernen Pvt. Ltd. S. 264–265. ISBN 978-81-203-1874-8.
  27. ^ Michael L. Scott (2009). Programmiersprache Pragmatik (3. Aufl.). Morgan Kaufmann. p. 347. ISBN 978-0-08-092299-7.
  28. ^ Einführung in Algorithmen. Cormen, Thomas H., Cormen, Thomas H. (2. Aufl.). Cambridge, Mass.: MIT Press. 2001. p. 128. ISBN 0-262-03293-7. OCLC 46792720.{{}}: CS1 Wartung: Andere (Link)
  29. ^ Demaine, Erik. "6.897: Fortgeschrittene Datenstrukturen Frühjahr 2003 Vortrag 12" (PDF). MIT CSAIL. Archiviert von das Original (PDF) am 24. November 2005. Abgerufen 14. April 2022.
  30. ^ a b Dung X. Nguyen (2003). "Binärbaumstruktur". Reis.edu. Abgerufen 28. Dezember, 2010.

Literaturverzeichnis

Externe Links