package BSTNode; use strict; sub new { my $class = shift; my $self = [undef, undef, undef]; bless($self, $class); return $self; } sub val { my $self = shift; if (@_) {$self->[0] = shift} return $self->[0]; } sub left { my $self = shift; if (@_ and (ref($_[0]) or !defined($_[0]))) {$self->[1] = shift} return $self->[1]; } sub right { my $self = shift; if (@_ and (ref($_[0]) or !defined($_[0]))) {$self->[2] = shift} return $self->[2]; } sub maxBelow { my $self = shift; my $current = $self; while (defined($current->right)) { $current = $current->right } return $current; } sub minBelow { my $self = shift; my $current = $self; while (defined($current->left)) { $current = $current->left } return $current; } 1;