30.11.2012 Aufrufe

Grundkurs Informatik Aufgabensammlung mit Lösungen Teil 3

Grundkurs Informatik Aufgabensammlung mit Lösungen Teil 3

Grundkurs Informatik Aufgabensammlung mit Lösungen Teil 3

MEHR ANZEIGEN
WENIGER ANZEIGEN

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

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!