
次のバイナリツリーがあります:
\begin{tikzpicture}[
every node/.style={draw,circle}]
\node {10}
child{node{5}}
child{node{20}}
;
\end{tikzpicture}
各ノードの中央に水平線を追加し、その線の上下に値を追加して、各ノードを 2 つに分割する方法はありますか?
各ノードがキーの外部に追加の値を格納する拡張バイナリ ツリーを作成したいと考えています。
編集:
最も近い動作は、代わりに数字を分数にすることです。しかし、見た目はあまり良くありません。2 つの異なる数字ではなく分数だと思われたくありません。
再度編集:
回答ありがとうございます。うまく機能しているようです。現在直面している唯一の問題は、ラベルの下にも水平線が追加されているように見えることです。ラベルの線だけを削除する方法はありますか?:
\begin{tikzpicture}[
every node/.style={circle split,draw}]
\node [label=330:$0$]{10\nodepart{lower}1}
child{node[label=330:$1$]{5\nodepart{lower}2}}
child{node[label=330:$2$]{20\nodepart{lower}3}}
;
\end{tikzpicture}
答え1
ノードにはTikZ ライブラリcircle split
のシェイプを使用します。shapes.multipart
\documentclass[tikz, border=3mm]{standalone}
\usetikzlibrary{shapes.multipart}
\begin{document}
\begin{tikzpicture}[
every node/.style={circle split,draw}
]
\node {10\nodepart{lower}1}
child{ node { 5\nodepart{lower}2}}
child{ node {20\nodepart{lower}3}}
;
\end{tikzpicture}
\end{document}
補遺:ツリー内のノードにラベルを追加する場合、スタイルはラベルにも適用されるため、すべてのノードにスタイルを使用することはできません。回避策は次のとおりです。
\documentclass[tikz, border=3mm]{standalone}
\usetikzlibrary{shapes.multipart}
\begin{document}
\begin{tikzpicture}[
X/.style={circle split,draw}
]
\node[X,label=330:$0$] {10\nodepart{lower}1}
child{ node[X] { 5\nodepart{lower}2}}
child{ node[X] {20\nodepart{lower}3}}
;
\end{tikzpicture}
\end{document}
これにより、次のようになります。