Perl中是否有n元树实现?

Perl中是否有n元树实现?,perl,algorithm,tree,Perl,Algorithm,Tree,我正在编写一个Perl脚本,希望使用n元树数据结构 是否有一个好的实现可以作为源代码而不是Perl库的一部分提供?我真的不明白为什么您希望它是源代码而不是Perl库,但是您可以下载任何CPAN模块的源代码 我没有使用过它,但它似乎满足了您的需求。我真的不明白为什么您希望它是源代码而不是perl库,但是您可以下载任何CPAN模块的源代码 我没有用过它,但看起来可以满足您的要求。除了Matthew已经说过的内容之外,下面的模块似乎也很合适: 除了Matthew已经说过的内容之外,以下模块似乎也适用

我正在编写一个Perl脚本,希望使用n元树数据结构


是否有一个好的实现可以作为源代码而不是Perl库的一部分提供?

我真的不明白为什么您希望它是源代码而不是Perl库,但是您可以下载任何CPAN模块的源代码


我没有使用过它,但它似乎满足了您的需求。

我真的不明白为什么您希望它是源代码而不是perl库,但是您可以下载任何CPAN模块的源代码


我没有用过它,但看起来可以满足您的要求。

除了Matthew已经说过的内容之外,下面的模块似乎也很合适:


除了Matthew已经说过的内容之外,以下模块似乎也适用:


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

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