二叉树格式化问题

二叉树格式化问题

我正在尝试在 LaTeX 中创建二叉搜索树。

有两个节点相互重叠“阻塞”。

有人有这方面的经验并知道如何解决它吗?我将在这里展示我的代码以及问题的图片。

\begin{tikzpicture}
    \node[circle,draw](z){$4$}
    child{
        node[circle,draw]{1} 
        child[missing] 
        child{node[circle,draw]{2}}
    }    
    child{
        node[circle,draw]{6} 
        child{node[circle, draw]{5}} 
        child{node[circle,draw]{9}  
        child{node[circle, draw]{7}} child[missing]}};
\end{tikzpicture} \\

这是该问题的图片:

在此处输入图片描述

答案1

您可以设置,level distance例如sibling distance使用选项

\begin{tikzpicture}[level distance=15mm,level/.style={sibling distance=40mm/#1}]

或者更详细地说:

\begin{tikzpicture}[level distance=10mm,
level 1/.style={sibling distance=32mm},
level 2/.style={sibling distance=16mm},
level 3/.style={sibling distance=8mm}]
\node[circle,draw](z){$4$}
child{
    node[circle,draw]{1} child[missing] child{node[circle,draw]{2}}
}
child{
    node[circle,draw]{6} child{node[circle, draw]{5}} child{node[circle,draw]{9}  
child{node[circle, draw]{7}} child[missing]}};
\end{tikzpicture}

两种方法都有效。

答案2

TikZ 手册写得很好,有几个例子可以帮助我们理解它的工作原理和使用方法。其中一个教程解决了这个问题“约翰内斯的讲座地图”。Till 使用的第一个例子展示了这个问题,引用了他的话

节点重叠是由于 TikZ 在放置子节点时不是特别智能。尽管可以配置 TikZ 以使用相当聪明的放置方法,但 TikZ 无法考虑子节点的实际大小。这可能看起来很奇怪,但原因是子节点是一次渲染和放置一个的,因此在处理第一个节点时不知道最后一个节点的大小。本质上,您必须“手动”指定适当的级别和同级节点间距。

正如@corporal 在他的/她的回答中所展示的,这是手动解决方案。

TikZ 手册中还有graphdrawing库。它旨在帮助我们绘制遵循结构逻辑的图形,如流程图和树。有了它,我们就可以告知 TikZ 我们图形的“逻辑”,然后它使用算法来布局图形。它的用法相当先进,但根据相应图形的大小/逻辑,它可能非常有用。它的巨大优势在于不需要指定任何节点位置,只需指定彼此之间的关系。该graphdrawing库的一个缺点是它需要用 进行编译luatex

graphdrawing这是使用和构建 OP 图的 MWE lua。请注意,没有指定位置和节点间距。

\documentclass{standalone}

\usepackage{tikz}
\usetikzlibrary{graphs,graphdrawing}
\usegdlibrary{trees}

\begin{document}
    \begin{tikzpicture}
     \graph [binary tree layout, nodes={draw,circle}] { 4 -- {
            1 -- 2,
            6 -- {
                5,
                9 -- 7}}};
    \end{tikzpicture}
\end{document}

结果:

在此处输入图片描述

相关内容