Bäume zeichnen mit LaTeX

White Blossoms
Nein, nicht so ein Baum!           („White Blossoms“, 30. April 2012)

Wenn du jetzt nur an eine Pflanze, einen Bleistift und Kleidung denkst, bist du hier wahrscheinlich falsch. Eine Datenstruktur und ein Textsatzsystem? Schon eher! Du fragst dich auch, wie  man Bäume in einem \mathrm{L\!\!^{{}_{\scriptstyle A}} \!\!\!\!\!\;\; T\!_{\displaystyle E} \! X}-Dokument zeichnet? Dann bist du hier genau richtig.

Diese Woche muss ich für die Uni ein paar Aufgaben über Bäume bearbeiten. Am liebsten natürlich wieder mit \mathrm{L\!\!^{{}_{\scriptstyle A}} \!\!\!\!\!\;\; T\!_{\displaystyle E} \! X}, wie (fast) alle anderen Abgaben zuvor auch. Da ich Bäume aber nur am Papier gezeichnet hab und nie am PC, hatte ich keine Ahnung, wie ich das machen soll. Darum hab ich meinen Tutor gefragt, ob er ein Paket für diesen Zweck kennt. Das tut er leider nicht. Natürlich gibt es Graphviz und andere Programme, aber direkt im Dokument ist es eben doch am schönsten. Also hab ich mich auf die Suche gemacht.

Beispielbaum
Hierarchie auf Minevaria mit qtree

Gefunden hab ich einen kurzen Blogartikel über „qtree“. Das Paket sieht schon mal nicht schlecht aus, ist aber leider nicht das, was ich suche. Trotzdem erwähne ich es hier mal, denn vielleicht wird es ja ein ander mal nützlich. Einfache Bäume für Hierarchien sind damit schnell aufs virtuelle Papier gebracht.

Dann bin ich über das Paket „TikZ“ gestolpert. Das kann u. a. E/R-Diagramme erstellen und Zeitverlaufsdiagramme. Und natürlich kann man das Paket auch für Bäume gebrauchen. Vierzehn Beispiele dazu gibt es auf dieser Seite. Mir ist da die Vorlage „Red-black tree“ aufgefallen, die meinen Vorstellungen am ehesten entspricht.

Die Farbgebung muss trotzdem nicht sein. Mir reicht es schlicht in schwarz und weiß. Kein Problem! In \tikzset{ … } kann man den Knoten einfach einen neuen Anstrich verpassen. Dazu hab ich folgenden Code dort eingefügt:

arn_b/.style = {treenode, circle, black, font=\sffamily\bfseries, draw=black, fill=white, text width=1.5em, thick},% black and white

Nun noch alle arn_n oder arn_r zwischen \begin{tikzpicture} und \end{tikzpicture} zu arn_b ändern und schon trägt der Baum die neuen „Farben“. Und wenn ich schon dabei bin, lösche ich gleich das x an der Kante unten links.

Binärbaum
Ein Beispiel-Binärbaum

Dass man leere Teilbäume einzeichen kann, ist schön, aber man braucht die Kennzeichnung nicht immer. Aber einfach rauslöschen und den fertigen Baum bestaunen geht hier nicht. Da es sich hier nicht um Binärbäume im Speziellen, sondern um allgemeine Bäume handelt, wird der leere Teilbaum so nicht versteckt, sondern ganz gelöscht. Will man einen leeren Teilbaum behalten und ihn nur verstecken, so muss man das explizit angeben. Der folgende Code fügt einen leeren Teilbaum ein, der nicht eingezeichnet werden soll:

child[missing] {}

Das Ergebnis sieht dann so aus:

Binärbaum
Der selbe Baum ohne „vermisste Kinder“

Passt! Jetzt muss ich nur noch die richtigen Daten eintragen. Die Bäume aus meinen Aufgaben kann ich hier leider nicht zeigen, da ich meine Lösungen nicht weitergeben darf. Deshalb habe ich für diesen Artikel die Werte der Vorlage übernommen. Wie man diese Daten verändert und eigene Bäume zeichnen kann, darf nun jeder selbst probieren.

Hinterlasse eine Antwort

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind markiert *

Du kannst folgende HTML-Tags benutzen: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>