트리의 각 레벨에 있는 리프 수(깊이)를 표시합니다.

트리의 각 레벨에 있는 리프 수(깊이)를 표시합니다.

아래와 같이 나무를 그리고 있습니다. 이에 대한 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}  

나무

트리의 각 수준에서 노드 수를 쓰고 싶습니다. 예를 들어, 인접한N, 나는 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}

산출:

산출

관련 정보