#!/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 tree\n" } } 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 $value\n" } # 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__
Binary tree for perl
精选 转载上一篇:一些经典的计算机书籍
下一篇:我的友情链接
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
【索引的数据结构】第1章节:B+Tree存储结构
B+Tree的数据结构
存储引擎 数据结构 MySQL B+Tree -
Binary_Tree
BT
BT 51cto -
binary search tree
binary search treebinary tree二叉树二叉搜索树
binary search tree Algorithm 二叉搜索树 二叉树 二叉查找树