Perl中是否有n元树实现?
时间:2020-03-05 18:45:54 来源:igfitidea点击:
我正在编写一个Perl脚本,并且想使用n元树数据结构。
有没有可以作为源代码(而不是Perl库的一部分)提供的良好实现?
解决方案
回答
我真的不明白为什么我们希望它是"源代码"而不是perl库,但是我们可以下载任何CPAN模块的源代码。
我没有用过,但是Tree看起来可以满足要求。
回答
补充一下Matthew已经说过的内容,以下模块似乎很合适:
树:: Nary
树::简单
树
回答
根据我们需要的树结构,我们可能不需要任何预构建的实现。 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对数组和数组引用的内置支持。