TikZtree mit asymmetrischen Geschwistern

TikZtree mit asymmetrischen Geschwistern

Gibt es eine Möglichkeit, einen (binären) Baum in Ti zu definieren?kZ, bei dem die Steigungen der beiden Linien der Geschwister unterschiedlich sind.

Ich möchte einen Baum mit folgendem Erscheinungsbild erzeugen, ohne jeden Knoten einzeln zu positionieren.

Baum mit asymmetrischen Geschwistern:

Antwort1

Ich poste diese Antwort, weil die vorherige Antwort (Sina Ahmadis) erfüllen eine wichtige Bedingung nicht:die Steigungen der beiden Linien der Geschwister sind unterschiedlich.


Anpassbarer Code:

Wir definieren einen neuen Befehl \binary. Seine Syntax lautet wie folgt:

\binary[slope left=<num>,slope right=<num>,height=<num>] (<node>) to (<node>) node {<text>} and (<node>) node {<text>};

Es wird uns geben

Bildbeschreibung hier eingeben

Beachten Sie, dass height„von“ und A.northnicht „von“ heißt A.south. Verbesserung erforderlich.

Die Einstellung auf slope left=50,slope right=35,height=0.75gibt uns

\documentclass[tikz,margin=3mm]{standalone}
\usetikzlibrary{calc}
\begin{document}
\begin{tikzpicture}
\def\binary[slope left=#1,slope right=#2,height=#3] (#4) to (#5) node #6 and (#7) node #8; {
    \node (#5) at ($(#4)+({180+#1}:{#3/cos(90-(#1))})$) {#6};
    \node (#7) at ($(#4)+({-#2}:{#3/cos(90-(#2))})$) {#8};
    \draw (#5.north)--(#4.south)--(#7.north);
}
\node (A) at (0,0) {A};
\binary[slope left=50,slope right=35,height=0.75] (A) to (1) node {1} and (B) node {B};
\binary[slope left=50,slope right=35,height=0.75] (B) to (2) node {2} and (C) node {C};
\binary[slope left=50,slope right=35,height=0.75] (C) to (3) node {3} and (D) node {D};
\binary[slope left=50,slope right=35,height=0.75] (D) to (4) node {4} and (E) node {E};
\binary[slope left=50,slope right=35,height=0.75] (E) to (5) node {5} and (F) node {F};
\end{tikzpicture}
\end{document}

Bildbeschreibung hier eingeben

Weniger anpassbarer Code:

Es \binarywurde etwas geändert und die Beschriftung aller Knoten und die Knotennamen sind jetzt gleich.

\documentclass[tikz,margin=3mm]{standalone}
\usetikzlibrary{calc}
\begin{document}
\begin{tikzpicture}
\def\binary[slope left=#1,slope right=#2,height=#3] (#4) to (#5) and (#6); {
    \node (#5) at ($(#4)+({180+#1}:{#3/cos(90-(#1))})$) {#5};
    \node (#6) at ($(#4)+({-#2}:{#3/cos(90-(#2))})$) {#6};
    \draw (#5.north)--(#4.south)--(#6.north);
}
\node (A) at (0,0) {A};
\binary[slope left=50,slope right=35,height=0.75] (A) to (1) and (B);
\binary[slope left=50,slope right=35,height=0.75] (B) to (2) and (C);
\binary[slope left=50,slope right=35,height=0.75] (C) to (3) and (D);
\binary[slope left=50,slope right=35,height=0.75] (D) to (4) and (E);
\binary[slope left=50,slope right=35,height=0.75] (E) to (5) and (F);
\end{tikzpicture}
\end{document}

Bildbeschreibung hier eingeben

Antwort2

Einfach zu machen mit forest:

\documentclass{article}
\usepackage[linguistics]{forest}
\begin{document}
\begin{forest}for tree={calign=fixed edge angles,
calign primary angle=-30,calign secondary angle=60,l=1.25cm}
[A [1] [B [2] [C [3] [D [4] [E [5] [F]]]]]]
\end{forest}
\end{document}

Ausgabe des Codes

Antwort3

Sie können das Paket verwenden forest. Hier ist ein minimales funktionierendes Beispiel:

\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage{forest}

\begin{document}
\begin{forest}
[A
    [1][B
        [2][C
            [3][D
                [4][E]
                ]
            ]
        ]
    ]
]
\end{forest}
\end{document}

was folgendes ergibt:

Bildbeschreibung hier eingeben

Weitere Beispiele finden SieHier.

verwandte Informationen