Here is a sample program that illustrates building a binary search tree, printing its elements in sorted order, and calculating its height. You can also get the file here.
#!/usr/bin/perl -w
sub new_node {
my( $node_val, $left_ptr, $right_ptr ) = @_;
my( $tmp ) = {
"value" => $node_val,
"left" => $left_ptr,
"right" => $right_ptr,
};
return $tmp;
}
sub add_node {
my( $node, $value ) = @_;
if ( $node->{value} gt $value ) {
if ( defined( $node->{left} ) ) {
&add_node( $node->{left}, $value );
} else {
$node->{left} = &new_node( $value, undef, undef );
}
} else {
if ( defined( $node->{right} ) ) {
&add_node( $node->{right}, $value );
} else {
$node->{right} = &new_node( $value, undef, undef );
}
}
}
sub traverse {
my($node) = @_;
if ( defined( $node->{left} ) ) {
&traverse( $node->{left} );
}
print "$node->{value}\n";
if ( defined( $node->{right} ) ) {
&traverse( $node->{right} );
}
}
sub height {
my($node) = @_;
my($retval) = 0;
if ( defined( $node->{left} ) ) {
$retval = &height( $node->{left} ) + 1;
}
if ( defined( $node->{right} ) ) {
my($tmp) = &height( $node->{right} ) + 1;
if ($tmp > $retval) { $retval = $tmp; }
}
return $retval;
}
@list = qw( bear aardvark cobra dingo elephant );
$root = &new_node( shift @list, undef, undef );
while (@list) { &add_node( $root, shift @list ); }
&traverse( $root );
$result = &height( $root );
print "Height = $result\n";