带森林的不平衡二叉树

带森林的不平衡二叉树

如何使用森林包绘制不平衡二叉树(缺少节点)?

答案1

您可能指的“缺失节点”有多种含义。提供您所拥有的树类型的最小工作示例以及您希望如何调整它的说明将非常有价值。

以下示例显示了您可能会想到的三件事:

缺失节点

节点2从第一层意义上讲,缺失:分支只是继续延伸,没有停下来形成节点。这会产生“不平衡”的树 - 左右分支的角度不同。

  • 此效果是通过改变节点的距离来实现的4的级别,使用l*=2它会使它加倍。

节点6第二种意义上是缺失的:它只是空的。它在各方面都被视为一个合适的节点,但没有内容。

  • 这很简单——{}只提供空内容。

节点9第三个意义上的缺失:它导致整个分支和节点结构出现缺口。这隔离了它的子节点,1718和树的剩余部分。

  • 这使用了.phantomNightRa 的答案中展示的风格。

代码:

\documentclass{standalone}
\usepackage{forest}

\begin{document}
\begin{forest}
  [1, for tree=draw
    [4, l*=2
      [7
        [13]
        [14]]
      [8
        [15]
        [16]]
    ]
    [3
      [5
        [,.phantom
          [17]
          [18]]
        [10
          [19]
          [20]]
      ]
      [{}
        [11
          [21]
          [22]]
        [12
          [23]
          [24]]
      ]
    ]
  ]
\end{forest}
\end{document}

答案2

使用森林,您可以创建一个幻影元素,其行为就像有一个用于布局的元素,但并未绘制。

例子:

\documentclass[a4paper]{article}
\usepackage{forest}

\begin{document}
\begin{forest}
for tree={circle,draw}
[9 
  [5
    [1]
    [,phantom]
  ]
  [7]
]
\end{forest}
\end{document}

其渲染效果为:

不平衡二叉树渲染

答案3

使用森林的左偏树:

  \begin{forest}
  label tree,
  for tree={
    circle,draw,
    s sep'=10pt, 
    edge+=thick,  
    font=\strut\footnotesize\sffamily,
  },
  [A, name=lvl0
    [B
      [C
        [D 
          [E
            [F][,phantom]
          ][,phantom]
        ][,phantom]
      ][,phantom]
    ][,phantom]
  ]
  \end{forest}

使用森林的右偏树:

  \begin{forest}
  label tree,
  for tree={
    circle,draw,
    s sep'=10pt, 
    edge+=thick,  
    font=\strut\footnotesize\sffamily,
  },
  [A[,phantom]
    [B[,phantom]
      [C[,phantom]
        [D[,phantom] 
          [E
            [,phantom] [F]
          ]
        ]
      ]
    ]
  ]
  \end{forest}

使用森林的左偏和右偏树

相关内容