TikZ 中的 AVL 树:在节点外部绘制

TikZ 中的 AVL 树:在节点外部绘制

我正在尝试使用 TikZ 绘制 AVL 树。我了解了基本的树结构,但不确定如何在节点外绘制平衡因子(见下图)。

有什么建议么?

在此处输入图片描述

答案1

一种选择是将labels 添加到node树中的 s 中,例如

\documentclass{standalone}
\usepackage{tikz}
\begin{document}

\begin{tikzpicture}[
   edge from parent path=
    {(\tikzparentnode.south) .. controls +(0,-.5) and +(0,.5)
                             .. (\tikzchildnode.north)},
   every node/.style={draw,circle},
   label distance=-1mm]
\node [label=330:$-1$]{50}
  child {node[label=330:$-1$] {10}}
  child {node[label=330:$0$] {20}
  child {node[label=330:$-1$] {10}}
  child {node[label=330:$-1$] {20}}
};
\end{tikzpicture}
\end{document}

在此处输入图片描述

答案2

这是一个(非常晚的)forest解决方案,只是因为我想画出弯曲的路径。

\documentclass[tikz,border=5pt]{standalone}
\usepackage{forest}

\begin{document}

\begin{forest}
  my label/.style={label={[label distance=-5pt, font=\sffamily]-45:#1}},
  for tree={
    circle,
    draw,
    font=\sffamily,
    parent anchor=south,
    edge path={
      \noexpand\path [draw, \forestoption{edge}] (!u.parent anchor) [out=-90,in=90] to (.child anchor)\forestoption{edge label};
    },
    child anchor=north,
  }
  [50, my label=-1
    [30, my label=-1
    [19, for tree={my label=0}
        [18]
        [21]
      ]
      [31, my label=0
      ]
    ]
    [60, for tree={my label=0}
      [59]
      [70]
    ]
  ]
\end{forest}

\end{document}

<code>森林</code> 解决方案

相关内容