Pergunta

Estou escrevendo um script Perl e gostaria de usar uma estrutura de dados em árvore n-ária.

Existe uma boa implementação disponível como código-fonte (em vez de parte de uma biblioteca Perl)?

Foi útil?

Solução

Adicionando ao que Matthew já disse, parece que os seguintes módulos seriam adequados:

Árvore::Nary
Árvore::Simples
Árvore

Outras dicas

Eu realmente não entendo por que você quer que seja "fonte" em vez de uma biblioteca Perl, mas você pode baixar a fonte para qualquer módulo CPAN.

Eu não usei, mas Árvore parece preencher suas necessidades.

Dependendo da finalidade de uma estrutura em árvore, talvez você não precise de nenhuma implementação pré-construída.Perl já os suporta usando arrays de arrayrefs.

Por exemplo, uma representação simples desta árvore

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

pode ser representado pelo seguinte código Perl:

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

Aqui, a representação da árvore é como pares aninhados:primeiro o elemento (neste caso, a letra), depois uma referência de array anônima representando os filhos desse elemento.Observe que => é apenas uma vírgula sofisticada em Perl que dispensa a necessidade de colocar aspas ao redor do token à esquerda da vírgula, desde que seja uma única palavra.O código acima também poderia ter sido escrito assim:

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

Aqui está um acumulador simples de profundidade de todos os elementos da árvore:

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 largura primeiro, altere a linha unshift @queue, @$children para push @queue, @$children)

Portanto, dependendo de quais operações você deseja realizar em sua árvore, a coisa mais simples pode ser usar o suporte integrado do Perl para arrays e referências de array.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top