Gibt es einen n-ary-Baum-Implementierung in Perl?
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) ?
Lösung
Hinzufügen zu dem, was Matthew sagte schon, es sieht aus wie die folgende Module geeignet:
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.