У меня есть следующий код. Если я уберу edge
команды, то все будет нормально. Я предполагаю, что проблема в том, что мои узлы имеют одинаковое содержимое, но я не могу этого избежать, очевидно.
Неверный код:
\documentclass[tikz,margin=10pt]{standalone}
\usetikzlibrary{positioning,shapes,arrows}
\begin{document}
\tikzset{
treenode/.style = {align=center, inner sep=0pt, text centered,
font=\sffamily},
}
\begin{tikzpicture}[->,>=stealth',level/.style={sibling distance = 5cm/#1, level distance = 1.5cm}]
\node (n) { 0 }
child { node (n0) { 0 }
edge from parent node[left] { 0 }
child { node (n00) { 0 }
edge from parent node[left] { 0 }
}
child { node (n01) { 1 }
edge from parent node[left] { 1 }
}
}
child { node (n1) { 1 }
edge from parent node[left] { 1 }
child { node (n10) { 0 }
edge from parent node[left] { 0 }
}
child { node (n11) { 1 }
edge from parent node[left] { 1 }
}
}
;
\end{tikzpicture}
\end{document}
\end{document}
Хороший код (но без меток):
\documentclass[tikz,margin=10pt]{standalone}
\usetikzlibrary{positioning,shapes,arrows}
\begin{document}
\tikzset{
treenode/.style = {align=center, inner sep=0pt, text centered,
font=\sffamily},
}
\begin{tikzpicture}[->,>=stealth',level/.style={sibling distance = 5cm/#1, level distance = 1.5cm}]
\node (n) { 0 }
child { node (n0) { 0 }
child { node (n00) { 0 }
}
child { node (n01) { 1 }
}
}
child { node (n1) { 1 }
child { node (n10) { 0 }
}
child { node (n11) { 1 }
}
}
;
\end{tikzpicture}
\end{document}
\end{document}
решение1
Взгляните на следующий код. Вам нужно расположить ребра в правильном положении, и это сработает. Вам нужно вставить ребро после всех дочерних узлов. Если вы вставите его до того, как он создаст (я так предполагаю) новый узел, который будет взят в качестве корневого узла для всех последующих дочерних узлов.
Если вы попытаетесь добавить в код дополнительные дочерние элементы к самым нижним узлам, вы увидите проблему.
\documentclass[tikz,margin=5mm]{standalone}
\begin{document}
\begin{tikzpicture}[->, %
>=stealth, %
level distance=1.5cm, %
level 1/.style={sibling distance=2.5cm}, %
level 2/.style={sibling distance=1.5cm}]
\node (n) {0}
child { node (n0) {0} {
child { node (n00) {0} edge from parent node [left] {0} }
child { node (n01) {1} edge from parent node [left] {1} }
} edge from parent node [left] {0}
}
child { node (n1) {1} {
child { node (n10) {0} edge from parent node [left] {0} }
child { node (n11) {1} edge from parent node [left] {1} }
} edge from parent node [left] {1}
}
;
\end{tikzpicture}
\end{document}
Визуализированное изображение:
решение2
Из руководства pgf:
\path . . . edge from parent[<Options>] . . . ;
Эта операция пути может использоваться только внутри<child paths>
и должна быть указана в конце, возможно, с последующим<node specifications>
likenode {a}
. Если a<child path>
не содержит эту операцию, она будет добавлена в конец<child path>
автоматически. \documentclass[tikz,margin=10pt]{standalone} \usetikzlibrary{arrows}
\begin{document}
\begin{tikzpicture}[
->,
>=stealth',
level/.style={sibling distance = 5cm/#1, level distance = 1.5cm}
]
\node (n) { 0 }
child { node (n0) { 0 }
child { node (n00) { 0 }
edge from parent node[left] {0}
}
child { node (n01) { 1 }
edge from parent node[right] {1}
}
edge from parent node[above left, inner sep=1pt,red] {0}% <-
}
child { node (n0) { 1 }
child { node (n00) { 0 }
edge from parent node[left] {0}
}
child { node (n01) { 1 }
edge from parent node[right] {1}
}
edge from parent node[above right, inner sep=1pt,red] {1}% <-
}
;
\end{tikzpicture}
\end{document}