如何突出显示二叉树的某些部分?

如何突出显示二叉树的某些部分?

我想绘制完整二叉树,并突出显示某些部分。我可以绘制完整二叉树,但无法突出显示指定的部分。

我想要绘制下面的图表:

在此处输入图片描述

到目前为止我能做这么多:

\documentclass[border=2pt]{standalone}
\usepackage{forest}
\begin{document}
\begin{forest}
for tree={l+=0.07cm} % increase level distance
  [1
    [2[4][5]]
    [3[6][7]]
  ]
\end{forest}
\end{document}

答案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,因此您可以TikZistgame环境中使用任何宏。

在此处输入图片描述

\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}

相关内容