Grundkurs Informatik Aufgabensammlung mit Lösungen Teil 3
Grundkurs Informatik Aufgabensammlung mit Lösungen Teil 3
Grundkurs Informatik Aufgabensammlung mit Lösungen Teil 3
Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.
YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.
3-38 Aufgaben und <strong>Lösungen</strong><br />
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯<br />
}<br />
if(p->l) tree_free(p->l); // rekursiv zum linken Nachfolger<br />
if(p->r) tree_free(p->r); // rekursiv zum rechten Nachfolger<br />
free(p); // Knoten löschen<br />
Aufgabe 12.1.6 (L2)<br />
Ein erweiterter Binärbaum ist dadurch gekennzeichnet, dass jeder Knoten entweder keinen<br />
oder zwei Nachfolger hat. Zeigen Sie: In einem erweiterten Binärbaum gilt ne=ni+1, wobei ne<br />
die Anzahl der Blätter ist und ni die Anzahl der der inneren Knoten.<br />
Lösung<br />
Die Skizze zeigt die drei kleinsten erweiterten Binärbäume, wobei die inneren Knoten als<br />
schwarze Punkte und die externen Knoten (Blätter) als Quadrate gezeichnet sind. Für diese<br />
gilt offenbar die Behauptung ne=ni+1. Ein erweiterter Binärbaum kann nur wachsen, indem<br />
ein Blatt durch einen aus Wurzel und zwei Blättern bestehenden Baum ersetzt wird. Es<br />
kommen also immer genau ein innerer Knoten und genau ein Blatt hinzu, so dass die Behauptung<br />
weiterhin erfüllt bleibt.<br />
Aufgabe 12.1.7 (P2)<br />
Schreiben Sie eine C-Funktion, die von einem verkettet gespeicherten Binärbaum die Anzahl<br />
der Knoten <strong>mit</strong> zwei Nachfolgern angibt. Die Knoten-Struktur sei:<br />
struct node { int info; struct node *l; struct node *r; };<br />
Lösung<br />
int nodes(struct node *w) {<br />
if(!w) return 0;<br />
if(w->l!=NULL && w->r!=NULL) return nodes(w->l)+nodes(w->r)+1;<br />
else if(w->l!=NULL && w->r==NULL) return nodes(w->l);<br />
else if(w->l==NULL && w->r!=NULL) return nodes(w->r);<br />
}<br />
Aufgabe 12.1.8 (P3)<br />
Schreiben Sie ein möglichst effizientes Programm, <strong>mit</strong> dem festgestellt werden kann, ob zwei<br />
lineare Listen <strong>mit</strong> jeweils n Elementen vom Typ Integer dieselben Elemente enthalten. Dabei<br />
ist nicht vorausgesetzt, dass die Elemente in den beiden Listen in derselben Reihenfolge<br />
angeordnet sind. Verwenden Sie dazu einen binären Suchbaum. Bestimmen Sie die im Mittel<br />
zu erwartende Komplexität hinsichtlich der Anzahl der Vergleiche.<br />
Lösung<br />
Aufgabe 12.1.9 (P2)<br />
Schreiben Sie unter Verwendung eines binären Suchbaums ein Programm, das alle doppelt<br />
vorkommenden Zahlen aus einem Array von Zufallszahlen löscht. Bestimmen Sie die Komplexität<br />
des Algorithmus hinsichtlich der Anzahl der Vergleiche.<br />
Lösung