使用 LaTeX 标签绘制二叉树

使用 LaTeX 标签绘制二叉树

有没有一些好的工具可以绘制带有标签的二叉树,这些标签由 latex 渲染?我需要自动完成树节点的放置,因为标签太多,无法手动计算它们的位置。

更具体一点。我可以轻松控制数据的输出格式。我无法做到的是输出为一种格式,我必须计算每个节点的坐标。我想将数据输出为一种可以计算图形布局的工具的格式。

编辑:我注意到下面的解决方案似乎不接受标签中的数学。例如,下面的代码不起作用,但如果我将美元放在标签“x”周围,那么它就会起作用。这是一个问题,因为我的标签是 2x2 矩阵。

\documentclass[tikz,border=5]{standalone}
\usetikzlibrary{graphs,graphdrawing,arrows.meta}
\usegdlibrary{trees}
\begin{document}
    \begin{tikzpicture}[>=Stealth]
        \graph[binary tree layout]
        {
            root->{$x$->{}}
        };
    \end{tikzpicture}
\end{document}

答案1

的最新版本PGF有许多图形绘制算法(需要lualatex),包括 Reingold–Tilford 方法的一个版本,并且可以轻松处理大量节点。

在最简单的情况下,树可以像这样指定:

\documentclass[tikz,border=5]{standalone}
\usetikzlibrary{graphs,graphdrawing,arrows.meta}
\usegdlibrary{trees}
\begin{document}
\begin{tikzpicture}[>=Stealth]
\graph[binary tree layout]{
  a -> {   
    b -> { 
      c -> { 
        d -> { e, f }, 
        g 
      }, 
    h -> { i, j }
    },
    k -> {
      l -> {
        m -> { n, o },
        p -> { q, r }
      }, 
      s -> {
        v -> {w, x},
        y -> {z}
      }
    }
  }
};
\end{tikzpicture}
\end{document}

在此处输入图片描述

还可以创建“图形宏”,这意味着图形规范可以或多或少自动创建,甚至使用lua

\documentclass[tikz,border=5]{standalone}
\usetikzlibrary{graphs,graphdrawing,graphs.standard,arrows.meta}
\usegdlibrary{trees}
\begin{document}
\tikzgraphsset{%
  levels/.store in=\tikzgraphlevel,
  levels=1,
  declare={full_binary_tree}{[
    /utils/exec={
      \edef\treenodes{%
\directlua{%
  function treenodes(l)
    if l == 0 then
      return "/"
    else
      return "/ [layer distance=" .. l*10 .. "]-- {" .. treenodes(l-1) .. ", " .. treenodes(l-1) .. "}"
    end
  end
  tex.print(treenodes(\tikzgraphlevel) .. ";")
}%
      }
    },
    parse/.expand once=\treenodes 
  ]}
}
\begin{tikzpicture}
\graph[binary tree layout, grow=down, sibling distance=5pt, significant sep=0pt, nodes={fill=red, draw=none, circle, inner sep=2.5pt, outer sep=0pt}]{
   full_binary_tree [levels=7];
};
\end{tikzpicture}
\end{document} 

在此处输入图片描述

相关内容