在Perl中是否有一个n-ary树实现?

时间:2008-09-01 09:34:38

标签: perl algorithm tree

我正在编写Perl脚本,并希望使用n-ary树数据结构。

是否有一个很好的实现可用作源代码(而不是Perl库的一部分)?

3 个答案:

答案 0 :(得分:6)

除了Matthew已经说过的内容之外,以下模块看起来很合适:

Tree::Nary
Tree::Simple
Tree

答案 1 :(得分:4)

我真的不明白为什么你想要它是“源”而不是perl库,但你可以下载任何CPAN模块的源代码。

我没有使用它,但Tree看起来满足了你的要求。

答案 2 :(得分:3)

根据您需要的树结构,您可能不需要任何预先构建的实现。 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对数组和数组引用的内置支持。

相关问题