tikz で配列ツリーを描く

tikz で配列ツリーを描く

配列がソート/操作されるなど、さまざまな種類の再帰呼び出しを描画しようとしています。そのため、ノードに要素のシーケンスを含めることができるツリーを描画する必要があります。

現在、私はパワーポイントでそれらを描いているところですが、おおよそ次のようになります (MERGE 手順を例として挙げました)。

MERGE 手順

ここで、tikz でのマージ ソート手順全体を示す投稿を見ましたが、それが必ずしも必要なわけではありません。各レベルでグループ セルを描画し、レベル間のグループ間に矢印を描画できる必要があります。現在、すべてのツリーに tikz を使用しています。

答え1

以下を使用したソリューションですforest:

ここに画像の説明を入力してください

基本的な考え方は、図が北 ( grow'=north) に成長し、矢印が後ろ向き ( ) になっている木であるというものです。各ノード (上部の葉を除く) は、で をlatex-使用して定義される複数の部分から成るノードです。\tikzsetrectangle split

\documentclass{article}

\usepackage{forest}
\usetikzlibrary {shapes.multipart}

\tikzset{multinode/.style={rectangle split, rectangle split horizontal, rectangle split parts=#1, anchor=center}}

\colorlet{c1}{yellow!30}
\colorlet{c2}{green!30}
\colorlet{c3}{red!30}
\colorlet{c4}{cyan!30}

\begin{document}

\begin{forest}
    for tree={grow'=north, l sep=7mm, edge={gray!70,very thick, latex-, shorten <=2pt, shorten >=2pt}, draw, anchor=center}
    [\nodepart{one}1\nodepart{two}1\nodepart{three}2\nodepart{four}2\nodepart{five}5\nodepart{six}7\nodepart{seven}7\nodepart{eight}8, multinode=8, {rectangle split part fill={c2,c4,c1,c3,c3,c1,c4,c2}}, for children={multinode=4}
        [\nodepart{one}1\nodepart{two}2\nodepart{three}7\nodepart{four}8, {rectangle split part fill={c2,c1,c1,c2}}, for children={multinode=2}
            [\nodepart{one}2\nodepart{two}7, fill=c1, for descendants={fill=c1}[7][2]]
            [\nodepart{one}1\nodepart{two}8, fill=c2, for descendants={fill=c2}[8][1]]
        ]
        [\nodepart{one}1\nodepart{two}2\nodepart{three}5\nodepart{four}7, {rectangle split part fill={c4,c3,c3,c4}}, for children={multinode=2}
            [\nodepart{one}2\nodepart{two}5, fill=c3, for descendants={fill=c3}[2][5]]
            [\nodepart{one}1\nodepart{two}7, fill=c4, for descendants={fill=c4}[7][1]]
        ]
    ]   
\end{forest}

\end{document}

関連情報