我正在编写一个 Perl 脚本并想使用一个 n 元树数据结构。
是否有一个很好的实现可以作为源代码(而不是 Perl 库的一部分)?
我真的不明白为什么你想要它是“源代码”而不是作为 perl 库,但你可以下载任何 CPAN 模块的源代码。
我没用过,但是Tree看起来可以满足你的要求。
根据您需要树结构的用途,您可能不需要任何预构建的实现。Perl 已经使用 arrayrefs 的数组来支持它们。
例如,这棵树的简单表示
t
/ \
a d
/ \ / \
b c e f
可以用以下 Perl 代码表示:
$tree = [ t => [ a => [ b => [], c => [] ]
d => [ e => [], f => [] ] ] ];
在这里,树的表示是嵌套的对:首先是元素(在本例中为字母),然后是表示该元素的子元素的匿名数组引用。请注意,这=>
只是 Perl 中的一个花哨的逗号,如果它是一个单词,您就不必在逗号左侧的标记周围加上引号。上面的代码也可以这样写:
$tree = [ 't', [ 'a' , [ 'b' , [], 'c' , [] ]
'd' , [ 'e' , [], 'f' , [] ] ] ];
这是树中所有元素的简单深度优先累加器:
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)
(对于广度优先,将行更改unshift @queue, @$children
为push @queue, @$children
)
因此,根据您要在树上执行的操作,最简单的方法可能就是使用 Perl 对数组和数组引用的内置支持。