Einführung
Ein Baum in Software ist wie ein biologischer Baum, aber mit den folgenden Unterschieden:
Die Zweige des Softwarebaums werden durch gerade Linien dargestellt. Ein gutes Beispiel für einen Softwarebaum, den Sie möglicherweise verwendet haben, ist der Verzeichnisbaum der Festplatte Ihres Computers.
Es gibt verschiedene Arten von Bäumen. Da ist der allgemeine Baum, von dem andere Bäume abgeleitet werden. Andere Bäume werden durch Einführung von Einschränkungen in den allgemeinen Baum abgeleitet. Zum Beispiel möchten Sie möglicherweise einen Baum, bei dem nicht mehr als zwei Zweige von einem Knoten ausgehen. Ein solcher Baum würde als binärer Baum bezeichnet. Dieser Artikel beschreibt den allgemeinen Baum und wie man auf alle seine Knoten zugreift.
Der Hyperlink zum Herunterladen des Codes ist am Ende dieses Artikels angegeben.
Um die Code -Beispiele in diesem Artikel zu verstehen, müssen Sie grundlegende Kenntnisse in JavaScript (ECMascript) haben. Wenn Sie dieses Wissen nicht haben, können Sie es von http: // www erhalten.breites Netzwerk.com/chrysanthusforcha-1/ecmascript-2015-Gänge.htm
Das allgemeine Baumdiagramm
'A' ist der Wurzelknoten; Es ist der Knoten erster Stufe. B, C, D sind in der zweiten Zeile; Dies sind Knoten der zweiten Ebene. E, F, G, H, I, J, K sind in der dritten Zeile und sie sind Knoten auf der dritten Stufe. Eine vierte Zeile hätte Knoten der vierten Ebene erzeugt und so weiter.
Baumeigenschaften
- Alle Zweige für alle Stufen von Knoten haben eine Quelle, die der Wurzelknoten ist.
- Ein Baum hat n - 1 Zweige, wobei n die Gesamtzahl der Knoten ist. Das obige Diagramm für den allgemeinen Baum hat 11 Knoten und 10 Zweige.
- Anders als bei Menschen, bei denen jedes Kind zwei Eltern hat, hat jedes Kind nur ein Elternteil. Der Wurzelknoten ist der größte Vorfahrer Elternteil. Ein Elternteil kann mehr als ein Kind haben. Jeder Knoten außer dem Wurzelknoten ist ein Kind.
Baumvokabular
Alle Knoten eines Baumes durchqueren
Alle Knoten eines Baumes können zugegriffen werden, um einen beliebigen Wert des Knotens zu lesen oder zu ändern. Dies wird jedoch nicht willkürlich gemacht. Es gibt drei Möglichkeiten, dies zu tun, was alle wie folgt die Tiefe-First-Durchquerung beinhaltet:
1) In-Ordnung: Einfach ausgedrückt wird in diesem Schema der linke Subtree zuerst durchquert. Dann wird auf den Stammknoten zugegriffen. Dann wird der richtige Subtree durchquert. Dieses Schema wird als links> Wurzel-> rechts symbolisiert. Abb. 1 wird hier als einfache Referenz neu gespielt:
Unter der Annahme, dass es zwei Geschwister pro Knoten gibt; Dann bedeutet links> root-> rechts, Sie zuerst auf den niedrigsten und linken Knoten zugreifen, dann auf das Elternteil des Knotens und dann auf das rechte Geschwister. Wenn es mehr als zwei Geschwister gibt, nehmen Sie den ersten als links und den Rest der rechten Knoten als rechte. Für den allgemeinen Baum oben ist auf den unteren linken Subtree zugegriffen, um zu haben, [EBF]. Dies ist ein Subtree. Der Elternteil dieses Subtree ist a; Als nächstes wird auf A zugegriffen, um [EBF] a zu haben. Als nächstes wird auf das Subtree [GCHI] zugegriffen, um einen größeren Subtree zu haben, [[EBF] A [GCHI]]. Sie können das linke Stammprofil sehen, das sich selbst darstellt. Dieser große linke Subtree hat den Unterbaum [JDK] nach dem Recht, das Durchqueren zu vervollständigen, um zu erhalten, [[EBF] A [GCHI]] [JDK].
2) Vorbestellung: Einfach ausgedrückt, in diesem Schema wird der Stammknoten zuerst zugegriffen, dann wird das linke Subtree als nächst. Dieses Schema wird als root-> links> rechts symbolisiert. Fig. 1 ist hier als einfache Referenz neu gespielt.
Unter der Annahme, dass es zwei Geschwister pro Knoten gibt; Dann bedeutet Wurzel-> links> rechts, Sie zuerst auf die Wurzel, dann auf das linke unmittelbare Kind und dann auf das rechte unmittelbare Kind. Wenn es mehr als zwei Geschwister gibt, nehmen Sie den ersten als links und den Rest der rechten Knoten als rechte. Das linke Kind des linken Kindes ist der nächste, der zugegriffen wird. Für den allgemeinen Baum oben ist der Wurzel -Subtree [ABCD]. Links von diesem Subtree haben Sie den Subtree [EF], der die Zugriffssequenz [ABCD] [EF] angibt, [EF]. Rechts von diesem größeren Teilbaum haben Sie zwei Teilbäume, [Ghi] und [jk], die die vollständige Sequenz geben, [ABCD] [EF] [GHI] [JK]. Sie können sehen, dass das rechte Profil von root-> links-> das rechte Profil selbst dargestellt wird.
3) Nachbestellung: Einfach ausgedrückt, in diesem Schema wird der linke Subtree zuerst durchquert, dann wird der rechte Subtree durchquert und dann wird auf die Wurzel zugegriffen. Dieses Schema wird als links> rechts-> Wurzel symbolisiert. Fig. 1 ist hier als einfache Referenz neu gespielt.
Für diesen Baum sind die Teilbälle [EFB], [Ghic], [jkd] und [a] die Sequenz bilden, [EFB], [Ghic], [jkd] [a]. Sie können das links-> rechts-> Root-Profil sehen, das sich selbst darstellt.
Den Baum erstellen
Der obige Baum wird mit ECMascript erstellt, das wie die neueste Version von JavaScript ist. Jeder Knoten ist ein Array. Das erste Element jedes Knotenarrays ist das übergeordnete Elternteil, ein anderes Array. Der Rest der Elemente des Knotens sind die Kinder des Knoten. Es gibt eine ECMascript -Karte, die jedes Array mit seiner entsprechenden Zeichenfolge (Buchstaben) bezieht. Das erste Codesegment ist:
In ECMascript können Sie auf eine Funktion zugreifen, die im Programm niedriger definiert ist. Mit Variablen können Sie das jedoch nicht tun. Sie können nicht auf eine Variable zugreifen, die im Programm niedriger definiert ist. Dies ist der Grund, warum die obigen Variablen wie gezeigt entwickelt wurden.
Beachten Sie auch, dass über dem Stammknoten A ein weiterer Knoten O (nicht Null) vorhanden ist (nicht Null). Das erste Element dieses Arrays (Knoten) ist undefiniert, was bedeutet, dass sein eigener übergeordneter Elternteil undefiniert ist. Der zusätzliche Knoten O wurde hinzugefügt, um den Traversing -Code einfach zu machen.
Es gibt auch eine Karte. Die Karte bezieht jedes Array von Ein-Buchstaben-Namen auf den entsprechenden Zeichenfolgennamen eines Buchstabens.
Rekursive Funktion
Um auf alle Elemente eines Baumes zuzugreifen, benötigen Sie eine rekursive Funktion. Eine rekursive Funktion ist eine Funktion, die sich immer wieder aufruft, bis eine Bedingung erfüllt ist.
Der Besuch eines Knotens bedeutet nicht unbedingt den Zugriff auf den Knoten. Um auf einen Knoten zuzugreifen, bedeutet der Wert, der entweder gelesen oder geändert wird. In den Code -Beispielen dieses Artikels bedeutet auf einen Knoten zuzugreifen und den Wert (Schlüssel) des Knotens zu lesen und anzuzeigen. In den Codeproben kann ein Knoten mehr als einmal besucht werden, aber auf seinen Wert wird nur einmal zugegriffen.
Algorithmus und Programmierung
Es gibt ein Programm für jede der drei Traversing -Techniken.
In-Ordnung-Algorithmus und Programmierung
Hier wird zuerst der niedrigste und liegste Knoten besucht. Die [EBF], [[EBF] A [GCHI]] und [JDK] -Uterbaum werden entwickelt, um die vollständige Sequenz zu ergeben, [[EBF] A [GCHI]] [JDK].
Es gibt zwei rekursive Funktionen für dieses Programm, bei denen jeder den anderen anruft. Die Hauptsache heißt FN (Knoten). Das Programm (Code) ist kurz. Laden Sie die kombinierte Datei unten herunter, um die Detail -Codierung zu erhalten.
Die drei Programme haben den gleichen Array Tree (Knode) -Setup.
Vorbestellungsalgorithmus und Programmierung
Hier gibt es nur eine rekursive Funktion. Es heißt Fn (Knoten). Hier werden die Unterbaume [ABCD], [EF], [GHI] und [JK] entwickelt, um die vollständige Sequenz zu ergeben, [ABCD] [EF] [GHI] [JK]. Das Programm dafür ist auch kurz.
Die drei Programme haben den gleichen Array Tree (Knode) -Setup.
Nachbestellungsalgorithmus und Programmierung
Hier wird zuerst der niedrigste und liegste Knoten besucht. Die [EFB], [GHIC], [JKD] und [A] Subtrees werden entwickelt, um die vollständige Sequenz zu ergeben, [EFB], [Ghic], [JKD] [a] .
Es gibt zwei rekursive Funktionen für dieses Programm, bei denen jeder den anderen anruft. Die Hauptsache heißt FN (Knoten). Das Programm dafür ist auch kurz. Laden Sie die kombinierte Datei unten für die detaillierte Codierung herunter.
Die drei Programme haben den gleichen Array Tree (Knode) -Setup.
Arten von Bäumen
Computerprogrammierbäume sind in der Tat nichtlineare Datenstrukturen. Lineare Datenstrukturen sind Listen, Arrays, Stapel, Warteschlangen, Stapel usw. Ein Baum mit N-Knoten hat N-1-Zweige. Wenn die Anzahl der Zweige gleich oder größer ist als die Anzahl der Knoten, wird ein Diagramm erhalten. Eine Grafik ist nicht wirklich ein Baum.
Es gibt Softwarebäume, die Layouts wie den Verzeichnisbaum in der Festplatte eines Computers beschreiben. Viele Bäume beschreiben bestehende Layouts überhaupt nicht. Tatsächlich beschreiben sie Algorithmen. Zum Beispiel wird der mathematische Algorithmus (x + y) x (x -y) durch einen Baum beschrieben. x und y sind Kinderknoten von +. x und y sind wieder Kinderknoten von -. Ein solcher Baum ist als Ausdrucksbaum bekannt.
Viele verschiedene Arten von Bäumen können in verschiedene Überschriften eingeteilt werden. wie binärer Baum, B-Tree, Ausdrucksbaum usw. Alle von ihnen werden vom allgemeinen Baum abgeleitet.
Einige der Baumkategorien sind in weitere Kategorien unterteilt. Der binäre Baum zum Beispiel hat mindestens den binären Suchbaum, den AVL -Baum und den kartesischen Baum.
wird heruntergeladen
Für diesen Artikel wurden drei Programme bereitgestellt. Es gibt ein Programm für die in Ordnungstechnik (Algorithmus), ein weiteres für die Vorbestellungstechnik und eine weitere für die Post-Order-Technik. Alle von ihnen wurden in eine Zip -Datei mit dem Namen Traversing gesteckt. Die ZIP -Datei kann heruntergeladen werden unter: GitHub.
Abschluss
Ein Softwarebaum ist wie ein normaler Baum im Park oder im Wald. Der Computerprogrammierbaum ist jedoch auf dem Kopf. Es gibt verschiedene Arten von Bäumen. Andere Bäume werden durch Einführung von Einschränkungen in den allgemeinen Baum abgeleitet. Alle Knoten eines Baumes können mit einem in Ordnung, vorbestellten oder nach der Bestellung Algorithmus zugegriffen werden. Ein Softwarebaum kann von jeder Computersprache erstellt werden. Hier wurde ECMascript ausgewählt, weil es die einfachste Computersprache ist. Die nächste Art von Baum, die Sie studieren sollten, ist der binäre Baum, da es sich um die beliebteste Baumdatenstruktur handelt.