加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

Binary tree for perl

发布时间:2020-12-16 00:13:02 所属栏目:大数据 来源:网络整理
导读:#!/usr/bin/perl -w# bintree - binary tree demo programuse strict;my ( $root,$n ); # first generate 20 random insertswhile ( $n++ 20 ) { insert ( $root,int ( rand ( 1000 ) ) } # now dump out the tree all three ways print "Pre order: ";pre_o
#!/usr/bin/perl -w
# bintree - binary tree demo program
use strict;
my ( $root,$n );
                       
# first generate 20 random inserts
while ( $n++ < 20 ) { insert ( $root,int ( rand ( 1000 ) ) }
                       
# now dump out the tree all three ways
                               print "Pre order:  ";
pre_order ( $root );
print "n";
print "In order:   ";
in_order ( $root );
print "n";
print "Post order: ";
post_order ( $root );
print "n";
                       
# prompt until EOF
for ( print "Search? "; <>; print "Search? " )
{
    chomp;
    my $found = search ( $root,$_ );
    if ( $found ) { print "Found $_ at $found,$found->{VALUE}n" }
    else        { print "No $_ in treen" }
}
                       
exit;
                       
#########################################
                       
# insert given value into proper point of
# provided tree.  If no tree provided,# use implicit pass by reference aspect of @_
# to fill one in for our caller.
sub insert
{
    my ( $tree,$value ) = @_;
    unless ( $tree )
    {
        $tree = {};
# allocate new node
        $tree-> {VALUE}  = $value;
        $tree-> {LEFT}   = undef;
        $tree-> {RIGHT}  = undef;
        $_[0] = $tree;
# $_[0] is reference param!
        return;
    }
    if    ( $tree->{VALUE} > $value ) { insert ( $tree-> {LEFT},$value ) }
    elsif ( $tree->{VALUE} < $value ) { insert ( $tree-> {RIGHT},$value ) }
    else                            { warn "dup insert of $valuen"  }
# XXX: no dups
}
# recurse on left child,# then show current value,# then recurse on right child.
sub in_order
{
    my ( $tree ) = @_;
    return unless $tree;
    in_order ( $tree->{LEFT} );
    print $tree->{VALUE}," ";
    in_order ( $tree->{RIGHT} );
}
# show current value,# then recurse on left child,# then recurse on right child.
sub pre_order
{
    my ( $tree ) = @_;
    return unless $tree;
    print $tree->{VALUE}," ";
    pre_order ( $tree->{LEFT} );
    pre_order ( $tree->{RIGHT} );
}
                          
# recurse on left child,# then recurse on right child,# then show current value.
sub post_order
{
    my ( $tree ) = @_;
    return unless $tree;
    post_order ( $tree->{LEFT} );
    post_order ( $tree->{RIGHT} );
    print $tree->{VALUE}," ";
}
                       
# find out whether provided value is in the tree.
# if so,return the node at which the value was found.
# cut down search time by only looking in the correct
# branch,based on current value.
sub search
{
    my ( $tree,$value ) = @_;
    return unless $tree;
    if ( $tree->{VALUE} == $value )
    {
        return $tree;
    }
    search ( $tree->{ ( $value < $tree->{VALUE} ) ? "LEFT" : "RIGHT"},$value )
}
__END__

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读