
ich habe dieses Problem mit überlappenden Knoten in einem Branch-and-Bound-Baum bei der Verwendung von TikZ.
Hier ist mein Code:
\documentclass[
12pt,
oneside,
a4paper,
english,
french,
spanish,
brazil
]{abntex2}
\usepackage{graphicx}
\usepackage{float}
\usepackage{tikz}
\usetikzlibrary{calc, shapes,positioning}
\usepackage[lmargin=2.5cm,rmargin=2.5cm,tmargin=2.5cm,bmargin=2.5cm]{geometry}
\begin{document}
\begin{figure}[H]
\centering
\tikzset{thick,
tree node/.style = {align=center, inner sep=0pt, font = \footnotesize},
every label/.append style = {font=\footnotesize},
PL/.style = {draw, circle, minimum size = 10mm, inner sep=0pt,
top color=white, bottom color=blue!20,align=center},
ENL/.style = {% edge node left
font=\footnotesize, left=1pt},
ENR/.style = {% edge node right
font=\footnotesize, right=1pt},
grow = down,
sibling distance = 8cm,
level distance = 2cm
}
\fbox{
\begin{tikzpicture}[every node/.style={font=\scriptsize}]
\node [PL] {$1$}
child{node [PL] {$2$}
child{node [PL] {$3$}
child{node [PL] {$4$}}
child{node [PL] {$5$}}}
child{node [PL] {$6$}
child{node [PL] {$7$}}
child{node [PL] {$8$}}}
}
child{node [PL,] {$9$}
};
\end{tikzpicture}
}
\caption{Árvore de busca do exemplo numérico.}
\end{figure}
\end{document}
Als Ergebnis erhalten Sie dieses Bild:
Wie Sie sehen, überlappt Knoten 7 Knoten 5. Wie kann ich das beheben?
Antwort1
Sie können dies sibling distance
von der Ebene abhängig machen, siehe das zweite Beispiel auf Seite 330 des pgfmanual v3.1.4. Sie können beispielsweise hinzufügen
level/.style={sibling distance={8cm/max(2,#1)}}
zu den Optionen des tikzpicture
:
\documentclass[
12pt,
oneside,
a4paper,
english,
french,
spanish,
brazil
]{abntex2}
\usepackage{float}
\usepackage{tikz}
\usetikzlibrary{calc, shapes,positioning}
\usepackage[lmargin=2.5cm,rmargin=2.5cm,tmargin=2.5cm,bmargin=2.5cm]{geometry}
\begin{document}
\begin{figure}[H]
\centering
\tikzset{thick,
tree node/.style = {align=center, inner sep=0pt, font = \footnotesize},
every label/.append style = {font=\footnotesize},
PL/.style = {draw, circle, minimum size = 10mm, inner sep=0pt,
top color=white, bottom color=blue!20,align=center},
ENL/.style = {% edge node left
font=\footnotesize, left=1pt},
ENR/.style = {% edge node right
font=\footnotesize, right=1pt},
grow = down,
level distance = 2cm
}
\fbox{
\begin{tikzpicture}[every node/.style={font=\scriptsize},
level/.style={sibling distance={8cm/max(2,#1)}}]
\node [PL] {$1$}
child{node [PL] {$2$}
child{node [PL] {$3$}
child{node [PL] {$4$}}
child{node [PL] {$5$}}}
child{node [PL] {$6$}
child{node [PL] {$7$}}
child{node [PL] {$8$}}}
}
child{node [PL,] {$9$}
};
\end{tikzpicture}
}
\caption{\'Arvore de busca do exemplo num\'erico.}
\label{fig:tree}
\end{figure}
\end{document}
Durch die Verwendung der max
Funktion wird sichergestellt, dass der Abstand erst dann abnimmt, wenn der Pegel größer als 2 ist.
Antwort2
Sie können Ihr Problem vermeiden, wenn Sie Ihren Baum mit dem forest
Paket zeichnen:
\documentclass[12pt,oneside,a4paper,
english,french,spanish,brazil]{abntex2}
\usepackage[margin=2.5cm]{geometry}
\usepackage{forest}
\usetikzlibrary{backgrounds}
\begin{document}
\begin{figure}[ht]
\centering
\begin{forest}
for tree = {
% node style
draw, circle,
minimum size = 10mm,
inner sep=0pt,
top color=white, bottom color=blue!20,
font=\scriptsize,
math content,
% tree style
s sep=6mm,
l sep=12mm,
% frame around tree
tikz+={\tikzset{background rectangle/.style={draw, ultra thin},
show background rectangle}}
}
% tree
[1
[2
[3
[4]
[5]
]
[6
[7]
[8]
]
]
[9,fit=band]
]
\end{forest}
\caption{\'Arvore de busca do exemplo num\'erico.}
\label{fig:tree}
\end{figure}
\end{document}
Forest ist ein auf pgf/TikZ basierendes Paket zum Zeichnen linguistischer (und anderer Arten von) Bäumen.
Antwort3
Dies ist ein einfaches Bild. Sie haben einen Stift zum Zeichnen und folgen der Spitze des Stifts, manuell, wie Sie möchten. Dies ist eine einfache TikZ-Zeichnung.
\documentclass[tikz,border=5mm]{standalone}
\begin{document}
\begin{tikzpicture}[yscale=1.5,
n/.style={circle,draw,fill=yellow!50, minimum size=6mm}]
\path
(0,0) node[n] (1) {1}
+(1,-1) node[n] (9) {9}
++(-1,-1) node[n] (2) {2}
+(1,-1) node[n] (6) {6}
+(-1,-1) node[n] (3) {3}
(3)
+(-.5,-1) node[n] (4) {4}
+(.5,-1) node[n] (5) {5}
(6)
+(-.5,-1) node[n] (7) {7}
+(.5,-1) node[n] (8) {8};
\draw (1)--(2)--(3)--(4)
(1)--(9) (2)--(6)--(8) (3)--(5) (6)--(7);
\end{tikzpicture}
\end{document}