二叉树的问题

二叉树的问题

我正在使用 tikz 绘制 AVL 树。我有以下代码:

\documentclass{scrartcl}
\usepackage{tikz}
\usetikzlibrary{trees}

\begin{document}
\begin{center}
    \begin{tikzpicture}
    \node[circle,draw](z){19}
    child{node[circle,draw]{16}
    child{node[circle,draw]{11}}
    child{node[circle,draw]{17}}}
    child{node[circle,draw]{21}
    child{node[circle,draw]{20}}
    child{node[circle,draw]{26}}};
    \end{tikzpicture}
\end{center}
\end{document}

它应该是平衡的 AVL 树。16 的右子节点应该是 17,21 的左子节点应该是 20。使用代码我得到了这个

在此处输入图片描述

如您所见,17 和 20 合并为一个节点。如何在不修改已绘制的所有其他树的情况下解决这个问题?

感谢您的回答!

答案1

您可以sibling distance为每个级别指定一个。

\documentclass{scrartcl}
\usepackage{tikz}
\usetikzlibrary{trees}

\begin{document}
    \begin{center}
        \begin{tikzpicture}[
                every node/.style={circle, draw},
                level 1/.style={sibling distance=6em},
                level 2/.style={sibling distance=3em},
            ]
            \node (z){19}
            child{node {16}
                child{node {11}}
                child{node {17}}}
            child{node {21}
                child{node {20}}
                child{node {26}}};
        \end{tikzpicture}
    \end{center}
\end{document}

在此处输入图片描述

我还为每个添加了一种样式node,可以清理您的代码。

答案2

使用该forest包后,树代码更简单,并且节点不会重叠:

\documentclass{scrartcl}
\usepackage{forest}

\begin{document}
\begin{center}
    \begin{forest}
for tree = {
% nodes
    circle, draw,
    minimum size = 2em,
    inner sep = 2pt, 
% tree
    grow = south,
    l sep = 9mm,  % vertical distances between nodes
    s sep = 3mm   % horizontal distances between nodes 
           }
[19
    [16
        [11]
        [17]
    ]
    [21 
        [20]
        [26]
    ];
]
    \end{forest}
\end{center}
\end{document}

在此处输入图片描述

相关内容