Grundkurs Informatik Aufgabensammlung mit Lösungen Teil 3
Grundkurs Informatik Aufgabensammlung mit Lösungen Teil 3
Grundkurs Informatik Aufgabensammlung mit Lösungen Teil 3
Erfolgreiche ePaper selbst erstellen
Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.
3-36 Aufgaben und <strong>Lösungen</strong><br />
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯<br />
}<br />
p=p->l; // weiter zum linken Nachfolger<br />
}<br />
p=s[t--]; // Knoten aus Stack holen<br />
}<br />
return 0;<br />
//------------------------------------------------------------------------<br />
// Einfügen eines Elementes in einen Binärbaum<br />
// Rückgabewert: 0 bei normaler Ausführung<br />
// -1 wenn nicht genug Speicher<br />
//------------------------------------------------------------------------<br />
int tree_in(struct node *root, int key) {<br />
int dir=0;<br />
struct node *p, *v=root, *k=root->l;<br />
p=node_init(key); // neuen Knoten erzeugen<br />
if(p==NULL) return -1; // nicht genug Speicher<br />
while(k) { // .. Einfügestelle suchen<br />
v=k; // Vorgänger<br />
if(keykey) {<br />
k=k->l; // Verzweige nach links<br />
dir=0; // Verzweigungsrichtung merken<br />
}<br />
else { // Verzweige nach rechts<br />
k=k->r;<br />
dir=1; // Verzweigungsrichtung merken<br />
}<br />
}<br />
if(dir) v->r=p; // Einfügen von p als rechten ..<br />
else v->l=p; // .. oder linken Nachfolger<br />
}<br />
//------------------------------------------------------------------------<br />
// Suchen eines Schlüssels key in einem Binärbaum<br />
// Rückgabewert: Anzahl der Schritte<br />
// -1 wenn nicht gefunden<br />
//------------------------------------------------------------------------<br />
int tree_search(struct node *root, int key) {<br />
int cnt=1;<br />
struct node *k=root->l; // Start <strong>mit</strong> der Wurzel<br />
while(k) { // Schlüssel key suchen<br />
if(k->key==key) return cnt; // Schlüssel gefunden<br />
else if(key < k->key) k=k->l; // gehe zum linken Nachfolger<br />
else k=k->r; // gehe zum rechten Nachfolger<br />
cnt++; // Schrittzähler inkrementieren<br />
}<br />
return -1; // nicht gefunden<br />
}<br />
//------------------------------------------------------------------------<br />
// Löschen eines Schlüssels key in einem Binärbaum<br />
// Rückgabewert: Anzahl der Schritte<br />
// -1 wenn nicht gefunden<br />
//------------------------------------------------------------------------<br />
int tree_del(struct node *root, int key) {<br />
int cnt=1, dir=0;<br />
struct node *v=root, *k=root->l; // Start <strong>mit</strong> der Wurzel<br />
struct node *s, *vs; // Symm. Vorgänger s und dessen Vorg.<br />
while(k) { // Schlüssel key suchen<br />
if(k->key==key) break; // Schlüssel gefunden<br />
v=k; // Vorgänger merken<br />
if(key < k->key) { // Schlüssel vergleichen<br />
k=k->l; // gehe zum linken Nachfolger