Informatik in 13 mit Java Bäume: Einfügen und Suchen

Werbung
Informatik in 13 mit Java
Bäume: Einfügen und Suchen
Gierhardt
Im Unterricht wurden die folgenden Klassen entwickelt:
c l a s s Knoten // −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
{ int i n h a l t ;
Knoten l i n k s , r e c h t s ;
Knoten ( i n t wert )
{ t h i s . i n h a l t = wert ;
this . l i n k s = null ;
this . r e c h t s = null ; }
} // c l a s s Knoten
c l a s s BinaerBaum // −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
{ Knoten w u r z e l = n u l l ;
void rekFuegeEin ( Knoten a s t , i n t wert )
{ i f ( wert < a s t . i n h a l t )
{ i f ( a s t . l i n k s == n u l l ) a s t . l i n k s = new Knoten ( wert ) ;
e l s e rekFuegeEin ( a s t . l i n k s , wert ) ;
}
e l s e { i f ( a s t . r e c h t s == n u l l ) a s t . r e c h t s = new Knoten ( wert ) ;
e l s e rekFuegeEin ( a s t . r e c h t s , wert ) ;
}
} // rekFuegeEin
void f u e g e E i n ( i n t wert )
{ i f ( w u r z e l == n u l l ) w u r z e l = new Knoten ( wert ) ;
e l s e rekFuegeEin ( w u r z e l , wert ) ;
} // f u e g e E i n
void rekLaufeDurch ( Knoten a s t )
{ i f ( a s t != n u l l )
{ rekLaufeDurch ( a s t . l i n k s ) ;
Out . p r i n t ( a s t . i n h a l t ) ; Out . p r i n t l n ( ) ;
rekLaufeDurch ( a s t . r e c h t s ) ;
}
} // rekLaufeDurch
void l a u f e D u r c h ( )
{ i f ( w u r z e l != n u l l )
{ rekLaufeDurch ( w u r z e l . l i n k s ) ;
Out . p r i n t ( w u r z e l . i n h a l t ) ; Out . p r i n t l n ( ) ;
rekLaufeDurch ( w u r z e l . r e c h t s ) ;
}
} // l a u f e D u r c h
} // c l a s s BinaerBaum
Eine Main-Klasse kann so aussehen:
c l a s s BinBaumBsp0
{ s t a t i c BinaerBaum baum ;
public s t a t i c void main ( S t r i n g [ ] a r g )
{ int zahl = 0 ;
S t r i n g muell ;
baum = new BinaerBaum ( ) ;
Out . p r i n t ( ” B i t t e Zahlen e i n g e b e n . Ende mit −1. ” ) ; Out . p r i n t l n ( ) ;
while ( z a h l != −1)
{ Out . p r i n t ( ” B i t t e Zahl e i n g e b e n : ” ) ;
z a h l = In . r e a d I n t ( ) ;
muell = In . readLine ( ) ;
i f ( z a h l != −1) baum . f u e g e E i n ( z a h l ) ;
} // w h i l e
baum . l a u f e D u r c h ( ) ;
} // main
} // c l a s s BinBaumBsp0
1
Aufgaben:
1. In einer Klasse können zwei Methoden den gleichen Namen haben, wenn sie sich durch
die Parameterliste unterscheiden. Dies bezeichnet man als Überladen. Die Auswahl der
tatsächlich aufzurufenden Methode erfolgt zur Laufzeit anhand des Typs der aktuellen
Parameter. Der Ergebnistyp muss allerdings immer gleich bleiben. Das dem Überladen
übergeordnete Konzept der Objektorientierung ist die Polymorphie, was so viel wie
Vielgestaltigkeit“ heißt. Ein weiteres Beispiel für Polymorphie ist die Verwendung des
”
+-Operators, der bei Zahlen die Addition und bei Strings die Konkatenation bewirkt.
Wende das Überladen bei den Methoden der Klasse BinaerBaum an.
2. Die Methode laufeDurch() ist zu umständlich formuliert. Vereinfache sie.
3. Der Baum soll nach bestimmten Inhalten durchsucht werden. Formuliere dazu eine
Funktion gefunden(int zahl) und teste die Methode.
Tipp: Überladen und natürlich Rekursion machen die Lösung einfach.
4. Die Klasse BinaerBaum wird um drei Konstanten ergänzt und die Methode laufeDurch
erhält einen weiteren Parameter. Formuliere damit die Methoden um, damit der Baum
auf verschiedene Arten durchlaufen werden kann. Teste die verschiedenen Arten aus.
c l a s s BinaerBaum // −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
{ Knoten w u r z e l = n u l l ;
f i n a l i n t INORDER
= 1;
f i n a l i n t PREORDER = 2 ;
f i n a l i n t POSTORDER = 3 ;
...
void l a u f e D u r c h ( i n t o r d e r )
...
} // c l a s s BinaerBaum
2
Herunterladen