Dibujar árbol de matrices con tikz.

Dibujar árbol de matrices con tikz.

Estoy tratando de dibujar diferentes tipos de llamadas recursivas donde las matrices se clasifican/manipulan, etc. Entonces necesito dibujar árboles donde los nodos puedan contener una secuencia de elementos.

Actualmente solo los estoy dibujando en PowerPoint y debería verse más o menos así (tomé el procedimiento MERGE como ejemplo):

Procedimiento de fusión

Vi una publicación aquí que muestra todo el procedimiento de ordenación por combinación en tikz, pero eso no es necesariamente lo que necesito. Necesito poder dibujar celdas de grupos en cada nivel y dibujar flechas entre grupos entre niveles. Actualmente estoy usando tikz para todos los árboles.

Respuesta1

Aquí hay una solución usando forest:

ingrese la descripción de la imagen aquí

La idea básica es que el diagrama es un árbol que crece hacia el norte ( grow'=north) y tiene flechas apuntando hacia atrás ( latex-). Cada nodo (aparte de las hojas en la parte superior) es un nodo de varias partes, definido usando \tikzsetwith rectangle 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}

información relacionada