以下のようなツリーを描いています。その 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
シンプルで堅牢な方法は、各レベルのノードの 1 つに名前を付け、そのノードの 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}
出力: