![这棵树为什么重叠且缺少边?](https://linux22.com/image/236087/%E8%BF%99%E6%A3%B5%E6%A0%91%E4%B8%BA%E4%BB%80%E4%B9%88%E9%87%8D%E5%8F%A0%E4%B8%94%E7%BC%BA%E5%B0%91%E8%BE%B9%EF%BC%9F.png)
\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 的