Pregunta

Estoy escribiendo un script en Perl y me gustaría utilizar una estructura de datos de árbol n-ario.

¿Existe una buena implementación que esté disponible como código fuente (en lugar de parte de una biblioteca Perl)?

¿Fue útil?

Solución

Sumando a lo que ya dijo Matthew, parece que los siguientes módulos serían adecuados:

Árbol::Nary
Árbol::Simple
Árbol

Otros consejos

Realmente no entiendo por qué quiere que sea "fuente" en lugar de una biblioteca Perl, pero puede descargar la fuente de cualquier módulo CPAN.

No lo he usado, pero Árbol busca satisfacer sus necesidades.

Dependiendo de para qué necesite una estructura de árbol, es posible que no necesite ninguna implementación prediseñadas.Perl ya los admite mediante el uso de matrices de arrayrefs.

Por ejemplo, una representación simple de este árbol.

             t
           /   \
          a     d
         / \   / \
        b   c e   f

podría representarse mediante el siguiente código Perl:

$tree = [ t => [ a => [ b => [], c => [] ]
                 d => [ e => [], f => [] ] ] ];

Aquí, la representación del árbol es como pares anidados:primero el elemento (en este caso, la letra), luego una referencia de matriz anónima que representa a los hijos de ese elemento.Tenga en cuenta que => es solo una coma elegante en Perl que le exime de tener que poner comillas alrededor del token a la izquierda de la coma, siempre que sea una sola palabra.El código anterior también podría haberse escrito así:

$tree = [ 't', [ 'a' , [ 'b' , [], 'c' , [] ]
                 'd' , [ 'e' , [], 'f' , [] ] ] ];

Aquí hay un acumulador simple en profundidad de todos los elementos del árbol:

sub elements {
    my $tree = shift;

    my @elements;
    my @queue = @$tree;
    while (@queue) {
        my $element  = shift @queue;
        my $children = shift @queue;
        push @elements, $element;
        unshift @queue, @$children;
    }

    return @elements;
}

@elements = elements($tree)     # qw(t a b c d e f)

(Para la amplitud primero, cambie la línea unshift @queue, @$children a push @queue, @$children)

Entonces, dependiendo de las operaciones que desee realizar en su árbol, lo más simple podría ser simplemente usar el soporte integrado de Perl para matrices y referencias a matrices.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top