如何绘制带有侧边栏的树?

如何绘制带有侧边栏的树?

我正在尝试绘制这样的图画:图片

我们可以用 tikz 来完成吗?

答案1

您可以将此用作起点:

\documentclass{article}
\usepackage{amsmath}
\usepackage{rotating}
\usepackage{tikz}
\usetikzlibrary{positioning,trees,calc,decorations.pathreplacing}

\newcommand\dotstheta{\overset{\vdots}{\Theta(1)}}
\begin{document}

\begin{sidewaysfigure}
\centering
\begin{tikzpicture}[
level 1/.style={sibling distance=45mm},
level 2/.style={sibling distance=15mm},
level 3/.style={sibling distance=4mm,level distance=8mm},
]

% the tree
\node (r1) {$f(n)$}
child { node (l2) {$f(n/b)$} 
  { child {node (l3) {$f(n/b^2)$} child child child} 
    child {node {$f(n/b^2)$} child child child} 
    child {node (ll3) {$f(n/b^2)$} child child child} 
  }
}
child { node (c2) {$f(n/b)$} 
  { child {node  {$f(n/b^2)$} child child child} 
    child {node (cc2) {$f(n/b^2)$} child child child} 
    child {node  {$f(n/b^2)$} child child child} 
  }
}
child { node (r2) {$f(n/b)$} 
  { child {node (rr3) {$f(n/b^2)$} child child child} 
    child {node {$f(n/b^2)$} child child child} 
    child {node (r3) {$f(n/b^2)$} child child child} 
  } 
};
% the last line of thetas
\node[anchor=north,inner sep=0pt] (theta) at ([yshift=-1cm]cc2) {$\dotstheta\dotstheta\dotstheta\dotstheta\dotstheta\dotstheta\dotstheta\dotstheta%
\dotstheta\dotstheta\dotstheta\dotstheta\dotstheta\dotstheta\dotstheta\dotstheta%
\dotstheta\dotstheta$};

% two auxiliary coordinates
\coordinate (aux1) at ( $ (r1) + (8.5,0) $ );
\coordinate (aux2) at ( $ (r1) + (-7,0) $ );

% the nodes to the right of the tree
\node(t1) at (aux1) {$f(n)$};
\node(t2) at (r2-|aux1) {$af(n/b)$};
\node(t3) at (r3-|aux1) {$a^2f(n/b^2)$};
\node(t4) at (theta.184-|aux1) {$\Theta\bigl(n^{\log_{b}n}\bigr)$};

% arrows from the tree to the nodes on the right
\foreach \i in {1,2,3}
  \draw[->,line width=1pt,dashed] (r\i) -- (t\i);
\draw[->,line width=1pt,dashed,shorten <=2pt] (theta.-4) -- (t4);

% the arrow to the left of the tree
\draw[<->] (aux2) -- node[fill=white] {$\log_{b}n$} (aux2|-theta.184);

% the brace at the bottom
\draw[decorate,decoration={brace,raise=2pt}] (theta.south east) -- node[label={[label distance=4pt]below:$n^{\log_{b}n}$}]{}  (theta.south west);

% the rule with the total
\draw ([yshift=-1cm]t4.east) -- +(-4cm,0);
\node[below = 2cm of t4.east,anchor=east] {Total: $\Theta\bigl(n^{\log_{b}n}\bigr) + \displaystyle\sum_{j=0}^{\log_{b}n-1}a^{j}f(n/b^{j})$};
\end{tikzpicture}
\end{sidewaysfigure}

\end{document}

在此处输入图片描述

相关内容