我正在尝试创建这样的图表
但是,这是我尝试的结果:
\begin{tikzpicture}[nodes={draw, circle}, ->]
\node{B1 }
child { node [label=left:\tiny{$\{t_2^d, s_2^d \}$}] (B2) {B2}
child {node [label=left:\tiny{$\{t_4^d, s_4^d \}$}] {B4} }
child { node [label=below:\tiny{$\{t_5^d, s_5^d \}$}] {B5} }
}
child { node [label=right:\tiny{$\{t_3^d, s_3^d \}$}] (B3) {B3}
child [ missing ]
child { node [label=right:\tiny{$\{t_6^d, s_6^d \}$}] {B6}
child { node [label=right:\tiny{$\{t_7^d, s_7^d \}$}] {B7}}
}
};
\node[right = 100pt of B3, label={[label distance=2pt]-90:\tiny{$\{t_6^d, s_6^d \}$}}] (B8) {B8}; \end{tikzpicture}
主要问题:
如何注释父节点
一个节点如何拥有两个父节点。
如何改变节点之间的距离以将注释放在每个节点的右侧。
答案1
一个孩子不能有两个父母。1实际上,我会为此使用矩阵。可以通过添加标签(这就是为什么必须添加才能获得正确的边界框的原因)。overlay
\path (l-7.east);
\documentclass[tikz,border=3mm]{standalone}
\usetikzlibrary{matrix}
\begin{document}
\begin{tikzpicture}[b/.style={circle,draw,execute at begin node={$b_{#1}$},
alias=b-#1,label={[rectangle,draw=none,overlay,alias=l-#1]right:{$[s_{#1},t_{#1}]$}}}]
\node[matrix of nodes,column sep=1em,row sep=2em]{
& & |[b=1]|& & |[b=2]| & & &|[b=7]|\\
& |[b=3]|& & |[b=4]| & & &|[b=8]| &\\
|[b=5]|& & |[b=6]| & & & &|[b=9]| &\\
};
\path[-stealth] foreach \X/\Y in {1/3,3/5,3/6,1/4,2/4} {(b-\X) edge (b-\Y)};
\draw (b-8) -- (b-9);
\path (l-7.east); %<- for the bounding box
\end{tikzpicture}
\end{document}
1这并不排除手动添加第二个父级的可能性。