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对数组和数组引用的内置支持。