
TikZ를 사용하여 분기 및 바인딩 트리에서 노드가 겹치는 문제가 발생했습니다.
내 코드는 다음과 같습니다.
\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}
결과적으로 다음과 같은 그림을 얻게 됩니다.
보시다시피, 노드 7이 노드 5와 겹치고 있습니다. 이 문제를 어떻게 해결할 수 있나요?
답변1
sibling distance
레벨에 따라 달라질 수 있습니다 . 2페이지의 두 번째 예를 참조하세요. pgfmanual v3.1.4의 330. 예를 들어 다음을 추가할 수 있습니다.
level/.style={sibling distance={8cm/max(2,#1)}}
다음 옵션에 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}
이 max
기능을 사용하면 레벨이 2보다 커질 때만 거리가 감소합니다.
답변2
패키지 를 사용하여 트리를 그리면 문제를 피할 수 있습니다 forest
.
\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는 언어적(및 다른 종류의) 트리를 그리기 위한 pgf/TikZ 기반 패키지입니다.
답변3
이것은 간단한 그림이다. 그림을 그리기 위한 펜이 있고 원하는 대로 펜 끝을 수동으로 따라갑니다. 이것은 일반 TikZ 그림입니다.
\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}