如何使用 tikzpicture 绘制一棵只有一个孩子的树?
如图所示,我想要一棵像(1)这样的树。
但我只能使用以下方法成功获取像 (2) 和 (3) 这样的图片:
\begin{tikzpicture}
\node[circle,draw](z){$30$}
% comment the below for (3):
child{}
child{
node[circle,draw]{40}}
;
\end{tikzpicture}
那么,是否存在我不知道的修饰符?我试图在 7xx 页的手册中找到它,但没有找到有用的东西。
答案1
您可以使用失踪儿童(第18.5.3 失踪儿童在 pgf 手册中):
\documentclass{article}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
\node[circle,draw](z){$30$}
child[missing]{}
child{
node[circle,draw]{40} child{node[circle,draw] {20}} child[missing] };
\end{tikzpicture}
\end{document}
答案2
您还可以使用 来执行此操作tikz-qtree
,它具有更简单的语法,特别是对于大树并且如果大多数节点是平衡的,而只有少数节点不平衡。
\documentclass{article}
\usepackage{tikz-qtree}
\begin{document}
\tikzset{every tree node/.style={minimum width=2em,draw,circle},
blank/.style={draw=none},
edge from parent/.style=
{draw, edge from parent path={(\tikzparentnode) -- (\tikzchildnode)}},
level distance=1.5cm}
\begin{tikzpicture}
\Tree
[.50
[.60 ]
[.30
\edge[blank]; \node[blank]{};
\edge[]; [.40
\edge[]; {20}
\edge[blank]; \node[blank]{};
]
]
]
\end{tikzpicture}
\end{document}
答案3
当然还有 Forest。它允许定义几个简单的样式,从而实现更简洁的树规范。
\begin{forest}
gappy tree
[
[, c phantom]
[
[]
[, c phantom]
]
]
\end{forest}
完整代码:
\documentclass[border=10pt]{standalone}
\usepackage{forest}
\forestset{%
gappy tree/.style={
for tree={
circle,
draw,
s sep'+=10pt,
fit=band,
},
},
c phantom/.style={draw=none, no edge},
}
\begin{document}
\begin{forest}
gappy tree
[
[, c phantom]
[
[]
[, c phantom]
]
]
\end{forest}
\end{document}