如何绘制附加到 tikz-qtree 的自定义节点?

如何绘制附加到 tikz-qtree 的自定义节点?

我想画一棵类似于合并排序递归树来自 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}

注释树

相关内容