如何使用 TikZ 在“景观设置”中绘制完整的 n 元树?

如何使用 TikZ 在“景观设置”中绘制完整的 n 元树?

我该如何绘制类似这样的图形(请原谅极其糟糕畫像)

糟糕的树

分支继续向右延伸。

抱歉,我无法提供任何确切的代码,但我基本上不知道该怎么做。希望您能理解。提前谢谢。

答案1

此解决方案用于forest创建树。您可以使用标准括号符号输入树。

创建了以下样式:

  • my node创建一个具有各种属性的椭圆节点 - 用于树的所有主节点;
  • my label它接受两个参数:一个指定标签的位置等,另一个指定内容 - 用于树主节点之间分支上的小标签;
  • my top它接受 1 个参数:指定主节点顶部矩形节点的内容;
  • my label node并分别指定使用和my top node创建的节点的外观等。my label={}{}my top={}

这样做的好处是树本身可以非常简单和简洁地指定:

[A\\10, my top=5
  [B\\15, my top=5, my label={above left}{7}]
  [C\\18, my top=5, my label={above}{8}]
  [D\\20, my top=5, my label={below left}{6}]
]

树

\documentclass[tikz, border=5pt]{standalone}
\usepackage{forest}
\usetikzlibrary{shapes.geometric,backgrounds}

\begin{document}
  \forestset{
    my label/.style n args=2{
       edge label={node [my label node, #1] {#2}},
    },
    my top/.style={
      tikz={
        \node [my top node] at (.north) {#1};
      }
    },
  }
  \tikzset{
    my node/.style={shape=ellipse,  draw, inner xsep=15pt, inner ysep=1.5pt, fill=white, thick},
    my top node/.style={draw, anchor=south, on background layer, inner ysep=2pt, yshift=-.5pt, thick, fill=white},
    my label node/.style={auto, midway, font=\sffamily\scriptsize, inner sep=1.5pt},
  }
  \begin{forest}
    for tree={
      grow'=0,
      child anchor=west,
      align=center,
      s sep+=5pt,
      l sep+=10pt,
      font=\sffamily,
      edge=thick,
      thick,
      my node,
    }
    [A\\10, my top=5
      [B\\15, my top=5, my label={above left}{7}]
      [C\\18, my top=5, my label={above}{8}]
      [D\\20, my top=5, my label={below left}{6}]
    ]
  \end{forest}
\end{document}

答案2

像这样,

\documentclass[border=10pt]{standalone}
\usepackage{tikz}
\usetikzlibrary{arrows,shapes}
\begin{document}

\tikzstyle{cloud} = [draw, ellipse, node distance=8em,
minimum height=2.75em, minimum width=5.5em]
\tikzstyle{box} = [draw, rectangle, node distance=2.8em]    
\tikzstyle{line} = [draw, -latex']

\begin{tikzpicture}[thick]
%Main nodes
\node[cloud] (a) {\begin{tabular}{c}A \\ 10 \end{tabular}};
\node[right of=a] (invis) {}; %Invisibile node for extra separation 
\node[cloud,right of=invis] (c) {\begin{tabular}{c} C \\ 18 \end{tabular}};
\node[cloud,above of=c] (b) {\begin{tabular}{c}B  \\15 \end{tabular}};
\node[cloud,below of=c] (d) {\begin{tabular}{c}D  \\20 \end{tabular}};
%Extra nodes
\node [draw, box, above of=a] (x) {5};
\node [draw, box, above of=c] (y) {5};
\node [draw, box, above of=b] (z) {5};
\node [draw, box, above of=d] (q) {5};

% Drawing arrows
\path [line] (a) -- node[above] {8} (c);
\path [line] (a) -- node[above] {7} (b);
\path [line] (a) -- node[below] {6} (d);

\end{tikzpicture}
\end{document}

其输出如下所示:

Tikz 图表输出

在 Tikz 中绘图的一个好技巧是找到一个看起来相似的示例并根据您的需要进行调整。

编辑:如果您想要更多的东西在右边,那么只需添加更多带有“右侧”的节点来定位它们。

相关内容