如何创建不平衡二叉树?

如何创建不平衡二叉树?

如何使用 tikzpicture 绘制一棵只有一个孩子的树?

如图所示,我想要一棵像(1)这样的树。

3棵树

但我只能使用以下方法成功获取像 (2) 和 (3) 这样的图片:

\begin{tikzpicture}
\node[circle,draw](z){$30$}
% comment the below for (3):
child{}
child{
node[circle,draw]{40}}
;
\end{tikzpicture}

那么,是否存在我不知道的修饰符?我试图在 7xx 页的手册中找到它,但没有找到有用的东西。

答案1

您可以使用失踪儿童(第18.5.3 失踪儿童在 pgf 手册中):

\documentclass{article}
\usepackage{tikz}

\begin{document}

\begin{tikzpicture}
\node[circle,draw](z){$30$}
  child[missing]{}
  child{
    node[circle,draw]{40} child{node[circle,draw] {20}} child[missing] };
\end{tikzpicture}

\end{document}

在此处输入图片描述

答案2

您还可以使用 来执行此操作tikz-qtree,它具有更简单的语法,特别是对于大树并且如果大多数节点是平衡的,而只有少数节点不平衡。

\documentclass{article}
\usepackage{tikz-qtree}
\begin{document}
\tikzset{every tree node/.style={minimum width=2em,draw,circle},
         blank/.style={draw=none},
         edge from parent/.style=
         {draw, edge from parent path={(\tikzparentnode) -- (\tikzchildnode)}},
         level distance=1.5cm}
\begin{tikzpicture}
\Tree
[.50     
    [.60 ]
    [.30  
    \edge[blank]; \node[blank]{};
    \edge[]; [.40
             \edge[]; {20}
             \edge[blank]; \node[blank]{};
         ]
    ]
]
\end{tikzpicture}
\end{document}

代码输出

答案3

当然还有 Forest。它允许定义几个简单的样式,从而实现更简洁的树规范。

\begin{forest}
  gappy tree
  [
    [, c phantom]
    [
      []
      [, c phantom]
    ]
  ]
\end{forest}

有缝隙的树

完整代码:

\documentclass[border=10pt]{standalone}
\usepackage{forest}
\forestset{%
  gappy tree/.style={
    for tree={
      circle,
      draw,
      s sep'+=10pt,
      fit=band,
    },
  },
  c phantom/.style={draw=none, no edge},
}
\begin{document}
\begin{forest}
  gappy tree
  [
    [, c phantom]
    [
      []
      [, c phantom]
    ]
  ]
\end{forest}
\end{document}

相关内容