Отображение количества листьев (глубины) на каждом уровне дерева

Отображение количества листьев (глубины) на каждом уровне дерева

Я рисую дерево, как показано ниже. MWE для него ниже:

\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}  

дерево

Я хочу записать количество узлов на каждом уровне дерева. Например, смежных сн, я хочу написать 1. На следующем уровне 2 и т. д. Поскольку я использую forestпакет,

[n\hspace{1cm}1]

похоже, не помогает. Есть какие-нибудь простые идеи, как это сделать?

Редактировать 1:

я нашелсвязанный вопросчто мне не подходит.

решение1

Forestуже подсчитывает уровни, поэтому отдельная функция для этого излишняя. Кроме того, минимизация использования pgfmathускорит компиляцию. (Это не проблема, если это ваше единственное дерево и оно такое простое, но это станет проблемой, если у вас много или сложные деревья.)

\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}

дерево с маркированными уровнями

решение2

Простым надежным способом было бы назвать один из узлов на каждом уровне и использовать координату y этого узла (используя tikzlibrary calc), чтобы получить правильную высоту для каждой метки. Подсчет количества узлов можно выполнить программно - в вашем случае формула ясна 2^n(используйте 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}

Выход:

выход

Связанный контент