答案1
我认为,理论上,这应该可以通过添加
tikz={\node[draw,circle,red,fit=()(!1)(!2)}
到要循环的节点的根。这里()
指的是节点和(!1)
它(!2)
的子节点。不幸的是,这并不奏效,因为它给出了:
因此,在实践中,经过一些额外的调整后看起来会更好:
有关更多详细信息,请参阅手册第 2.3 节。
完整代码如下:
\documentclass[border=4pt]{standalone}
\usepackage{forest}
\begin{document}
\begin{forest}
for tree={l+=0.08cm} % increase level distance
[1
[2,tikz={\node[draw,circle,red,fit=()(!1),inner sep=0mm,xshift=1mm]{};}
[4][5]
]
[3
[6][7]
]
]
\end{forest}
\end{document}
另一个可能更好的选择是使用
tikz={\node[draw,circle,red,fit=()(!1)(!2),inner sep=0mm]{};}
给予
答案2
这是使用istgame
包。由于istgame
环境与环境(几乎)相同tikzpicture
,因此您可以TikZ
在istgame
环境中使用任何宏。
\documentclass{standalone}
\usepackage{istgame}
\usepackage{makecell}
\begin{document}
\begin{istgame}
% tree (istgame macros)
\xtdistance{15mm}{30mm}
\istroot(1){1} \istb \istb \endist
\xtdistance{15mm}{15mm}
\istroot(2)(1-1)<180>{2}
\istb*{}{4} \istb*{}{5} \endist
\istroot(3)(1-2)<0>{3}
\istb*{}{6} \istb*{}{7} \endist
\xtSubgameOval(2){(2-1)(2-2)}[circle,solid,red,inner sep=10pt]
% comments (tikz macros)
\coordinate (aa) at ([shift={(-2.5,-.5)}]2);
\draw [->] (aa) node [left] {Block} -- + (1,0);
\coordinate (bb) at ([shift={(2,.3)}]3);
\draw [->] (bb) node [right] {\makecell[l]{Complete \\ binary \\ tree}} -- + (-1,0);
\end{istgame}
\end{document}