2008-09-01 87 views

回答

4

我真的不明白爲什麼你想要它是「源代碼」而不是perl庫,但你可以下載任何CPAN模塊的源代碼。

我沒有使用它,但Tree看起來滿足您的要求。

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對數組和數組引用的內置支持。

相關問題