#!c:/perl #package binärerbaum; use strict; use warnings; sub knot { return ( { 'zahl' => shift, 'linksweg' => undef, 'rechtsweg' => undef } ); } sub newtree { ###################### # Erstellen des Trees my $ref_liste1 = shift; my $zahl = undef; my $ref_wurzel = undef; for my $zzahl (@$ref_liste1){ my $refvalue = $ref_wurzel; if ($zahl) { while (1) { ############################ #Beginn des Vergleichs if($zzahl < $$refvalue{'zahl'}) { if(defined($$refvalue{'linksweg'})) { $refvalue = $$refvalue{'linksweg'}; } else { $$refvalue{'linksweg'} = knot($zzahl); $zahl = $ref_wurzel last; #Ende } } ####### #wenns Links nicht mehr weiter geht, geh rechts weiter else { if ($zzahl > $$$refvlue {'zahl'}) { if(defined($$refvalue{'rechtsweg'})) {$refvalue = $$refvalue{'rechtsweg'}; } else { $$refvalue{'rechtsweg'} = knot($zzahl); last; } } } } return($ref_wurzel); } ######## #Hauptprogramm ######## ################### #Ausgabe des Trees #### sub ausgabe { my $self = shift; my $refvalue = shift; if(defined($self->{'ref_wurzel'}->{'linksweg'})) { ausgabe($$refvalue{'linksweg'}) } print "$self->{'ref_wurzel'}->{'zahl'}\n"; if(defined($self->{'ref_wurzel'}->{'rechtsweg'})) { ausgabe($$refvalue{'rechtsweg'}) } } ausgabe($ref_wurzel); sub Neu { my $class = shift; my $self = {}; bless( $self, $class ); my @liste = @_; $self->{'ref_wurzel'} = newtree (\@liste); return $self; } ############### #Hinzufügen weiterer Äste ############### sub hinzufuegen { my $self = shift; my @newList = @_; if (defined($self->{ref_wurzel})){ my $list = $self->{ref_liste1}; foreach my $zzahl (@newList) { push(@$list, $zzahl); }; $self->{ref_wurzel} = newtree ($list); } } } 1;