Muestra el recuento de hojas (profundidad) en cada nivel del árbol.

Muestra el recuento de hojas (profundidad) en cada nivel del árbol.

Estoy dibujando un árbol como el que se muestra a continuación. El MWE para ello está a continuación:

\documentclass[]{article}   
\usepackage{forest}   
\title{}   
\author{}   
\begin{document}   
\date{}   
\begin{forest}   
    [n   
    [n-1   
    [n-2[$\vdots$]][n-2[$\vdots$]]]   
    [n-1   
    [n-2[$\vdots$]][n-2[$\vdots$]]]]   
\end{forest}   
\end{document}  

árbol

Deseo escribir el recuento de nodos en cada nivel del árbol. Por ejemplo, adyacente anorte, deseo escribir 1. En el siguiente nivel, 2 y así sucesivamente. Como estoy usando forestel paquete,

[n\hspace{1cm}1]

no parece ayudar. ¿Alguna idea sencilla sobre cómo hacer esto?

Edición 1:

encontréuna pregunta relacionadaque no me funciona.

Respuesta1

Forestya cuenta niveles, por lo que una función separada para hacer esto es superflua. Además, minimizar el uso de pgfmathacelerará la compilación. (No es un problema si este es su único árbol y es así de simple, pero es más problemático si tiene muchos árboles o árboles complejos).

\documentclass[tikz,border=10pt]{standalone}
\usepackage[]{forest}
\begin{document}

\begin{forest}
  for tree=math content,
  before drawing tree={
    tikz+={\coordinate (a) at (current bounding box.east);},
    for nodewalk={fake=r, L, ancestors}{
      if={>O+t_+t={content}{\vdots}}{
        tikz+={\node [anchor=base west] at (.base -| a) {$2^k$};}
      }{%
        tikz+/.process={Ow+Pw}{level}{int(2^#1)}{\node [anchor=base west] at (.base -| a) {#1};}
      }
    }
  }
  [n   
    [n-1   
      [n-2
        [\vdots]
      ]
      [n-2
        [\vdots]
      ]
    ]   
    [n-1   
      [n-2
        [\vdots]
      ]
      [n-2
        [\vdots]
      ]
    ]
  ]   
\end{forest}   

\end{document}

árbol con niveles etiquetados

Respuesta2

Una forma simple y robusta sería nombrar uno de los nodos en cada nivel y usar la coordenada y de ese nodo (haciendo uso de calctikzlibrary) para obtener la altura correcta para cada etiqueta. El conteo del número de nodos se puede realizar de forma programática; en su caso, la fórmula es clara 2^n(use pgfs pow):

\documentclass[]{article}
\usepackage{forest}
\usetikzlibrary{calc} % let
\newcommand\leftsep{3} % How far left of center line of forest labels appear (cm)
\newcounter{levelcount} % Stores current level in tree
\newcommand\countnodes[1]{% Command to add label at height of node #1
    \draw let \p{L} = (#1) in (-\leftsep,\y{L}) node {\pgfmathparse{int(pow(2,\value{levelcount}))}\pgfmathresult};
    \stepcounter{levelcount} % Step counter for next level
}
\begin{document}
\begin{forest}
[n, name=root % Name root
[n-1, name=level1 % Name a node in level 1
[n-2, name=level2 [$\vdots$]][n-2[$\vdots$]]] % Name a node in level 2
[n-1
[n-2[$\vdots$]][n-2[$\vdots$]]]]
{% Node counting - these must be in order
\countnodes{root}
\countnodes{level1}
\countnodes{level2}
}
\end{forest}
\end{document}

Producción:

producción

información relacionada