我想画一棵类似于合并排序递归树在来自 TeXample.net 的这个 Tikz 示例:
但是,我不想绘制所有+
和=
符号,我只想要两列:一列在左边,一列在右边。我正在使用 tikz-qtree 包。我想知道有没有办法将自定义节点添加到此树结构中?
这是我现在的树:
\documentclass[10pt,letterpaper]{article}
\usepackage{amsmath}
\usepackage{amsfonts}
\usepackage{amssymb}
\usepackage{amsthm}
\usepackage{cancel}
\usepackage{tikz-qtree}
\begin{document}
\tikzset{edge from parent/.style=
{draw, edge from parent path={(\tikzparentnode) -- (\tikzchildnode)}}}
\begin{tikzpicture}[sibling distance=.5cm]
\matrix{
\Tree
[.n
[.$\dfrac{n}{2}$ [.$\dfrac{n}{4}$ ] [.$\dfrac{n}{4}$ ] [.$\dfrac{n}{4}$ ] ]
[.$\dfrac{n}{2}$ [.$\dfrac{n}{4}$ ] [.$\dfrac{n}{4}$ ] [.$\dfrac{n}{4}$ ] ]
[.$\dfrac{n}{2}$ [.$\dfrac{n}{4}$ ] [.$\dfrac{n}{4}$ ] [.$\dfrac{n}{4}$ ] ]
]
&
\\};
\end{tikzpicture}
\end{document}
编辑 我当前的解决方案是使用 tikz-nodes,但它看起来有点奇怪:
\tikzset{edge from parent/.style=
{draw, edge from parent path={(\tikzparentnode) -- (\tikzchildnode)}}}
\begin{tikzpicture}[sibling distance=0.5cm,level distance=1.5cm,node distance=1.5cm,auto,on grid,initial text=]
\matrix{
\Tree
[.n
[.$\dfrac{n}{2}$ [.$\dfrac{n}{4}$ ] [.$\dfrac{n}{4}$ ] [.$\dfrac{n}{4}$ ] ]
[.$\dfrac{n}{2}$ [.$\dfrac{n}{4}$ ] [.$\dfrac{n}{4}$ ] [.$\dfrac{n}{4}$ ] ]
[.$\dfrac{n}{2}$ [.$\dfrac{n}{4}$ ] [.$\dfrac{n}{4}$ ] [.$\dfrac{n}{4}$ ] ]
]
&
\node (0) {$= n$};
\node (1) [below=of 0] {$= 3 \cdot \dfrac{n}{2}$};
\node (2) [below=of 1] {$= 3^2 \cdot \dfrac{n}{2^2}$};
\\};
\end{tikzpicture}
答案1
一种更简单的方法是只使用两棵树,然后使用 TikZ 的scope
机制移动第二棵树(并更改其分支属性):
\documentclass[10pt,letterpaper]{article}
\usepackage{amsmath}
\usepackage{amsfonts}
\usepackage{amssymb}
\usepackage{amsthm}
\usepackage{cancel}
\usepackage{tikz-qtree}
\begin{document}
\tikzset{edge from parent/.style=
{draw, edge from parent path={(\tikzparentnode) -- (\tikzchildnode)}}}
\begin{tikzpicture}[sibling distance=.5cm]
\Tree
[.n
[.$\dfrac{n}{2}$ [.$\dfrac{n}{4}$ ] [.$\dfrac{n}{4}$ ] [.$\dfrac{n}{4}$ ] ]
[.$\dfrac{n}{2}$ [.$\dfrac{n}{4}$ ] [.$\dfrac{n}{4}$ ] [.$\dfrac{n}{4}$ ] ]
[.$\dfrac{n}{2}$ [.$\dfrac{n}{4}$ ] [.$\dfrac{n}{4}$ ] [.$\dfrac{n}{4}$ ] ]
]
\begin{scope}[xshift=2.5in]
\tikzset{edge from parent/.style={edge from parent path={(\tikzparentnode) -- (\tikzchildnode)}},every tree node/.style={text width=4em,align=left}}
\Tree [.{$=n$}
[.{$= 3 \cdot \dfrac{n}{2}$}
[.{$= 3^2 \cdot \dfrac{n}{2^2}$} ]]]
\end{scope}
\end{tikzpicture}
\end{document}
答案2
这是使用实验包装器绘制树的方法森林,justtrees.sty
(v 0.05)。如果有人想要一份,请告诉我,您已准备好成为小白鼠!
这也显示了如何用红色封装右列,以防您想这样做。(我不清楚这是否是需要的,但如果您不想要它,很容易删除它。)
该解决方案的想法是,您只需添加注释即可将注释指定为主树本身的一部分just={<annotation>}
,然后标签将被添加并自动与树的当前级别对齐。
例如:
\documentclass[tikz,border=10pt]{standalone}
\usepackage{amsmath,amssymb}
\usepackage{justtrees}% v 0.05
\begin{document}
\begin{justtree}
{%
for tree={
just format={xshift=1pt},
math content,
parent anchor=,
child anchor=,
},
}
[n, just=$n$
[\dfrac{n}{2}, just=$3\cdot\dfrac{n}{2}$
[\dfrac{n}{4}, just=$3^2\cdot\dfrac{n}{2^2}$, tikz+={\draw [red] (right just 1.north west) rectangle (right just 3.south east);}]
% [\dfrac{n}{4}, just=$3^2\cdot\dfrac{n}{2^2}$]% uncomment this line and comment the previous one to eliminate the red box.
[\dfrac{n}{4}]
[\dfrac{n}{4}]
]
[\dfrac{n}{2}
[\dfrac{n}{4}]
[\dfrac{n}{4}]
[\dfrac{n}{4}]
]
[\dfrac{n}{2}
[\dfrac{n}{4}]
[\dfrac{n}{4}]
[\dfrac{n}{4}]
]
]
\end{justtree}
\end{document}