Datenstrukturen & Algorithmen

Baumdatenstruktur-Tutorial für Anfänger

Baumdatenstruktur-Tutorial für Anfänger

Einführung

Ein Baum in Software ist wie ein biologischer Baum, jedoch mit 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 Baumarten. Es gibt den allgemeinen Baum, von dem andere Bäume abgeleitet sind. Andere Bäume werden abgeleitet, indem Beschränkungen in den allgemeinen Baum eingeführt werden. Sie möchten beispielsweise einen Baum, bei dem nicht mehr als zwei Zweige von einem Knoten ausgehen; ein solcher Baum würde als Binärbaum bezeichnet.  Dieser Artikel beschreibt den allgemeinen Baum und den Zugriff auf alle seine Knoten.

Der Hyperlink zum Herunterladen des Codes befindet sich am Ende dieses Artikels.

Um die Codebeispiele in diesem Artikel zu verstehen, benötigen Sie Grundkenntnisse in JavaScript (ECMAScript). Wenn Sie dieses Wissen nicht haben, können Sie es unter http://www.breites Netzwerk.com/ChrysanthusForcha-1/ECMAScript-2015-Kurs.htm

Das allgemeine Baumdiagramm


'A' ist der Wurzelknoten; es ist der Knoten der ersten Ebene. B, C, D stehen in der zweiten Zeile; das sind Knoten der zweiten Ebene. E, F, G, H, I, J, K befinden sich auf der dritten Zeile und sind Knoten der dritten Ebene. Eine vierte Zeile hätte Knoten der vierten Ebene erzeugt, und so weiter.

Baumeigenschaften

- Alle Zweige für alle Knotenebenen 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 beim Menschen, wo jedes Kind zwei Elternteile hat, hat beim Softwarebaum jedes Kind nur ein Elternteil. Der Wurzelknoten ist der größte Vorfahren-Elternteil. Ein Elternteil kann mehr als ein Kind haben. Jeder Knoten außer dem Wurzelknoten ist ein Kind.

Baumwortschatz

Durchqueren aller Knoten eines Baums

Auf alle Knoten eines Baums kann zugegriffen werden, um jeden Wert des Knotens zu lesen oder zu ändern. Dies geschieht jedoch nicht willkürlich. Es gibt drei Möglichkeiten, dies zu tun, die alle die Depth-First-Traversal wie folgt beinhalten:

1) In der Reihenfolge: Einfach ausgedrückt wird in diesem Schema zuerst der linke Teilbaum durchlaufen; dann wird auf den Wurzelknoten zugegriffen; dann wird der rechte Teilbaum durchlaufen. Dieses Schema wird als links->wurzel->rechts symbolisiert. Abb. 1 wird hier zur leichteren Bezugnahme erneut angezeigt:

Angenommen, es gibt zwei Geschwister pro Knoten; dann links->root->rechts bedeutet, dass Sie zuerst auf den untersten und den ganz linken Knoten zugreifen, dann auf den Elternknoten des Knotens und dann auf den rechten Geschwisterknoten. Wenn es mehr als zwei Geschwister gibt, nimm den ersten als den linken und den Rest der rechten Knoten als den rechten. Für den obigen allgemeinen Baum wird auf den unteren linken Teilbaum zugegriffen, [EBF]. Dies ist ein Unterbaum. Der Elternteil dieses Teilbaums ist A; also wird als nächstes auf A zugegriffen, um [EBF]A . zu haben. Als nächstes wird auf den Teilbaum [GCHI] zugegriffen, um einen größeren Teilbaum zu haben, [[EBF]A[GCHI]]. Sie können das linke->root->rechte Profil sehen, das sich selbst darstellt. Dieser große linke Teilbaum hat den Teilbaum [JDK] zu seiner Rechten, um die Durchquerung abzuschließen, um [[EBF]A[GCHI]] [JDK] zu erhalten.

2) Vorbestellung: Einfach ausgedrückt, in diesem Schema wird zuerst auf den Wurzelknoten zugegriffen, dann wird der linke Teilbaum als nächstes durchlaufen und dann wird der rechte Teilbaum durchlaufen. Dieses Schema wird als root->links->rechts symbolisiert. Abb. 1 wird hier zur leichteren Bezugnahme erneut angezeigt.

Angenommen, es gibt zwei Geschwister pro Knoten; dann root->left->right bedeutet, dass Sie zuerst auf die Wurzel zugreifen, dann auf das linke unmittelbare Kind und dann auf das rechte unmittelbare Kind. Wenn es mehr als zwei Geschwister gibt, nimm den ersten als den linken und den Rest der rechten Knoten als den rechten. Das am weitesten links stehende Kind des linken Kindes ist das nächste, auf das zugegriffen wird. Für den obigen allgemeinen Baum ist der Wurzelteilbaum [ABCD]. Links von diesem Teilbaum befindet sich der Teilbaum [EF] mit der Zugriffsfolge [ABCD][EF]. Rechts von diesem größeren Unterbaum haben Sie zwei Unterbäume, [GHI] und [JK], die die vollständige Sequenz ergeben, [ABCD][EF][GHI][JK]. Sie können das Root->Links->Rechtsprofil sehen, das sich selbst darstellt.

3) Nachbestellung: Einfach ausgedrückt, in diesem Schema wird zuerst der linke Teilbaum durchlaufen, dann wird der rechte Teilbaum durchlaufen und dann wird auf die Wurzel zugegriffen. Dieses Schema wird als links->rechts->root> symbolisiert. Abb. 1 wird hier zur leichteren Bezugnahme erneut angezeigt.

Für diesen Baum sind die Unterbäume [EFB], [GHIC], [JKD] und [A], die 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 Elternelement des Knotens, ein weiteres Array. Die restlichen Elemente des Knotens sind die Kinder des Knotens, beginnend mit dem ganz linken Kind. Es gibt eine ECMAScript-Zuordnung, die jedes Array mit seinem entsprechenden String (Buchstaben) in Beziehung setzt. Das erste Codesegment ist: