使用 tkz-graph 为顶点添加多个标签

使用 tkz-graph 为顶点添加多个标签

我正在尝试创建一些图形来说明如何使用数组索引来表示二叉树。因此,我希望树中的每个节点都有两个标签:一个在注释内,表示其值,一个在节点上方,表示其在数组中的索引。我已经创建了一个令人满意的图形,但我觉得应该有更好的方法来创建图形。

这是我的身材:

这是生成该图的代码:

\documentclass{article}
\usepackage{tkz-graph}
\GraphInit[vstyle = Normal]

\begin{document}
\begin{tikzpicture}
\tikzset{VertexStyle/.style = {draw, thick, circle, fill=yellow!80}}
\SetGraphUnit{1.6}
    \Vertex[LabelOut=true, Lpos=90, Ldist=.12cm, L=\texttt{1}]{a}
    \Vertex{4}
    \SOWE[LabelOut=true, Lpos=90, Ldist=.12cm,  L=\texttt{2}](4){b}
    \SOWE(4){3}
    \begin{scope}
        \SetGraphUnit{1}
        \SOWE[LabelOut=true, Lpos=90, Ldist=.12cm,  L=\texttt{4}](3){d}
        \SOWE(3){2}
        \SOEA[LabelOut=true, Lpos=90, Ldist=.12cm,  L=\texttt{5}](3){e}
        \SOEA(3){1}
        \Edge(3)(2)
        \Edge(3)(1)
    \end{scope}
    \SOEA[LabelOut=true, Lpos=90, Ldist=.12cm,  L=\texttt{3}](4){c}
    \SOEA(4){2}
        \begin{scope}
        \SetGraphUnit{1}
        \SOWE[LabelOut=true, Lpos=90, Ldist=.12cm,  L=\texttt{6}](2){f}
        \SOWE[L=1](2){1a}
        \SOEA[LabelOut=true, Lpos=90, Ldist=.12cm,  L=\texttt{7}](2){g}
        \SOEA[L=1](2){1b}
        \Edge(2)(1a)
        \Edge(2)(1b)
        \end{scope}
    \Edge(4)(3)
    \Edge(4)(2)
\end{tikzpicture}
\end{document}

为了创建标签,我绘制了每个节点(或顶点)两次:一次用于顶部标签,另一次用于底部标签。还有其他使用方法吗tkz-graph?我意识到可能有更好的方法来绘制二叉树,但这对更一般的图形也很有用。

非常感谢大家的帮助。

答案1

这里是基于 的一个建议forest,如果后面真的有更复杂的例子,强烈建议切换到forest

\documentclass{article} 
\usepackage[edges]{forest}
\begin{document}
\tikzset{lbl/.style={label=above:#1}}
\begin{forest}
for tree={s sep=1cm,l sep=1.2cm,
draw, thick, circle, fill=yellow!80,
edge={thick}
}
  [4,lbl=1
   [2,lbl=3
    [2,lbl=4]
    [1,lbl=5]
   ]
   [2,lbl=3
    [1,lbl=6]
    [1,lbl=7]
   ]
  ]
\end{forest}
\end{document}

在此处输入图片描述

请注意,这forest提供了几乎无限的可能性来以编程方式绘制树。因此从长远来看,我真的认为你会从那里受益(但我当然可能是错的)。

相关内容