这棵树为什么重叠且缺少边?

这棵树为什么重叠且缺少边?
\node [circle, draw] at (6, 0)  {63}
    child{node [circle, draw] (left node) {26}
    child{node [rectangle,draw] (left node) {A:12}}
    child{node [circle, draw] (right node) {14}
        child{node[rectangle,draw] (left node) {B:7}}
        child{node [circle, draw] (right node) {7}
            child{node[rectangle,draw] (left node) {Z:2}}
            child{node[rectangle,draw] (right node) {X:5}}
            }
           }
           }
    child{node [circle, draw] (right node) {37}
    child{node [rectangle,draw]  (left node) {I:18}}
    child{node [circle, draw] (right node) {19}
        child{node[rectangle,draw] (left node) {S:9}}
         child{node[rectangle,draw] (right node) {M:10}}
         }}
         ;

我是使用 LaTeX 构建树的新手,似乎无法解决自己的问题。有人能看出这段代码中的问题是什么,导致树看起来乱糟糟的吗?

答案1

一个问题是所有的(left node)(right node)符号。该语法为节点提供了一个名称。通常节点名称是唯一的,但你却将其中一半命名为一个东西,另一半命名为另一个东西!所以只需将它们去掉即可。

树的每一层默认兄弟距离为 15 毫米。没有计算后代的数量来自动让树间隔开来。所以你只需要确保第一层稍微伸展一下。

以下是完整的示例文档:

\documentclass{minimal}
\usepackage{tikz}
\begin{document}

\begin{tikzpicture}[level 1/.style={sibling distance=30mm},level 2/.style={sibling distance=15mm}]
\node [circle, draw] at (6, 0)  {63}
    child{node [circle, draw]  {26}
    child{node [rectangle,draw]  {A:12}}
    child{node [circle, draw]  {14}
        child{node[rectangle,draw]  {B:7}}
        child{node [circle, draw]  {7}
            child{node[rectangle,draw]  {Z:2}}
            child{node[rectangle,draw]  {X:5}}
            }
           }
           }
    child{node [circle, draw]  {37}
    child{node [rectangle,draw]  {I:18}}
    child{node [circle, draw]  {19}
        child{node[rectangle,draw] {S:9}}
         child{node[rectangle,draw]  {M:10}}
         }}
         ;
\end{tikzpicture}

\end{document}

示例代码输出

答案2

取决于你需要画多少个,以及它们需要看起来有多像马修的答案中的例子,tikz-qtree包提供了一种非常快捷的方法来输入此类树。它使用一种简单的带标签的括号输入方法来描述树。以下是使用它格式化的示例。

\documentclass{article}
\usepackage{tikz-qtree}
\begin{document}
 \tikzset{edge from parent/.style=
     {draw, edge from parent path={(\tikzparentnode) -- (\tikzchildnode)}}}
\begin{tikzpicture}[every leaf node/.style={draw,rectangle,minimum width={3em}},
                    every internal node/.style={draw,circle}]
\Tree
 [.63 
    [.26 A:12 
        [.14 B:7 
            [.7 Z:2 X:5 ]]] 
            [.37 I:18 
                [.19 S:9 M:10  ]]]

\end{tikzpicture}

\end{document}

语法很简单:[.X Y Z ]创建一个节点 X,它有子节点 Y 和 Z(它们本身可以是节点)。右括号和 Z 之间的空格对于树解析器来说很重要([.X Y Z]会报错)。

树的图片

谢谢公斤用于弄清楚如何使分支从圆圈节点的中心而不是底部延伸(这是的默认设置tikz-qtree,更适合语言树。)

答案3

根据@Alan Munn 的回答,您可能更喜欢这种风格(摘自 tikz-qtree 手册):

\begin{tikzpicture}[every leaf node/.style={draw,rectangle,minimum width={3em}},
                    every internal node/.style={draw,circle,child anchor=center}]

\tikzset{edge from parent/.style={draw,
edge from parent path={(\tikzparentnode.south)
--  +(0,-4pt)
-|  (\tikzchildnode)}}}

\Tree
 [.63 
    [.26 A:12 
        [.14 B:7 
            [.7 Z:2 X:5 ]]] 
            [.37 I:18 
                [.19 S:9 M:10  ]]]

\end{tikzpicture}

输出

如果你投票赞成这个答案,那么请公平地考虑也投票赞成@Alan Munn 的

相关内容