Frage

Ich Schreibe ein Perl-Skript und möchte eine n-ary-Baum-Datenstruktur.

Gibt es eine gute Implementierung, die als Quellcode (nicht als Teil einer Perl-Bibliothek) ?

War es hilfreich?

Lösung

Hinzufügen zu dem, was Matthew sagte schon, es sieht aus wie die folgende Module geeignet:

Tree::Nary
Tree::Simple
Baum

Andere Tipps

Ich weiß wirklich nicht verstehen, warum Sie wollen, dass es war "die Quelle" und nicht als perl-Bibliothek, aber Sie können download die Quelle für alle CPAN-Modul.

Ich habe nicht verwendet es, aber Baum sieht aus zu füllen Ihre Anforderungen.

Je nachdem, was Sie brauchen, eine Baumstruktur, die Sie vielleicht nicht brauchen jede pre-built Umsetzung.Perl bereits unterstützt Sie mit arrays von arrayrefs.

Für Beispiel, eine einfache Darstellung dieses Baum

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

konnte dargestellt werden durch die folgende Perl-code:

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

Hier, der Baum-Darstellung ist als verschachtelte Paare:zuerst das element (in diesem Fall den Buchstaben), dann ein anonymes array-Referenz Vertretung der Kinder des Elements.Beachten Sie, dass => ist nur ein schicker Komma in Perl, die Sie befreit haben, um setzen Sie Anführungszeichen um die der token an die Links neben dem Komma, vorausgesetzt, es ist ein einziges Wort.Der obige code könnte auch so geschrieben:

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

Hier ist ein einfaches Tiefe-zuerst-Akkumulator, der alle Elemente in der Baumstruktur:

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)

(Für Breite erste, ändern Sie die Zeile unshift @queue, @$children zu push @queue, @$children)

Also je nachdem, welche Operationen Sie ausführen möchten, auf dem Baum, das einfachste, was möglicherweise einfach verwenden, Perl-built-in-Unterstützung für arrays und array-Referenzen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top