Informatik/Jahrgangsstufe Q/001 Klausuren/Q1/1999-2000

Werbung
3. INFORMATIK-KLAUSUR
IF-GK 12 (GA)
16.03.2000
− SEITE 1 −
Aufgabe 1: Geben Sie bei den folgenden Aussagen an, ob sie wahr oder falsch sind.
Begründen Sie ihre Antwort!
Nr.
wahr
falsch Aussage
Jeder Knoten eines Binärbaums hat zwei Knoten als
Söhne.
Jeder Knoten eines Binärbaums hat einen Knoten als
Vater.
1.
2.
3.
Ein Binärbaum hat immer den Grad 2.
4.
Ein Binärbaum hat höchstens den Grad 2.
Beim Löschen eines Elements aus einem Binärbaum
ändert sich die Höhe dieses Baumes.
Beim Einfügen eines Elements in einen Binärbaum bleibt
die Höhe dieses Baumes unverändert.
Ein Binärbaum mit der Höhe 5 besitzt mindestens 9
Knoten.
5.
6.
7.
8.
Ein Binärbaum der Höhe 4 besitzt höchstens 15 Knoten.
9.
Die Inorder-Ausgabe eines Suchbaums ist immer
Sortiert.
10.
Ein Suchbaum ist ein Binärbaum mit Ordnungsrelation.
11.
Ein Suchbaum besitzt nur Knoten, deren Inhalte alle
voneinander verschieden sind.
Suchbäume und Binärbäume sind toll!!!
Aufgabe 2: a) Welche der nachfolgend abgebildeten Bäume sind keine Binärbäume?
Begründen Sie kurz Ihre Entscheidung.
1.
2.
3.
b) Welche der nachfolgend abgebildeten Bäume sind keine Suchbäume?
Begründen Sie kurz Ihre Entscheidung.
1.
2.
3.
6
4
5
3
3
3
2
1
7
4
5
2
4
8
9
2
5
1
6
3. INFORMATIK-KLAUSUR
IF-GK 12 (GA)
16.03.2000
− SEITE 2 −
Aufgabe 3: Implementieren Sie eine DELPHI-Funktion, welche die Höhe eines Binärbaums
bestimmt und zurückgibt. Benutzen Sie dabei wann immer möglich die im
Unterricht entwickelten Standardoperationen (Anlage 1). Starten Sie mit dem
folgenden Funktionskopf:
function BaumHoehe(b: PBinBaum): integer;
var { hier kommen Ihre lokalen Variablen hin...
Begin
}
{ hier kommen Ihre DELPHI-Anweisungen hin... }
End;
Aufgabe 4: a) Löschen Sie nacheinander im untenstehenden Suchbaum die Elemente
S, Z, M, K, F, R, G
nach dem Verfahren des im Unterricht entwickelten Algorithmus
SuchLoeschen (Anlage 2). Notieren Sie nach jeder Löschung den daraus
resultierenden Baum.
M
F
S
A
K
B
G
R
Z
O
b) Im Unterricht wurde besprochen, wie das Löschen eines Knotens mit zwei
nicht leeren Teilbäumen optimiert werden könnte: Es ist nicht sinnvoll, den
zu löschenden Knoten immer nur durch das größte Element im linken
Teilbaum zu ersetzen (siehe auch den Algorithmus EchtLoeschen, zweiter
Sonst-Zweig in Anlage 2). Vielmehr sollte man in Abhängigkeit des
Höhenunterschieds zwischen linkem und rechtem Teilbaum den zu
löschenden Knoten entweder durch das kleinste Element im rechten Teilbaum
oder durch das größte Element im linken Teilbaum ersetzen.
Optimieren Sie den Algorithmus EchtLoeschen wie oben beschrieben.
Verwenden Sie dabei für die Fallunterscheidung die in Aufgabe 3
entwickelte Funktion BaumHoehe und geben Sie auch den Algorithmus
BestimmeKleinstesElement an.
Aufgabe 5: a) Geben Sie zum Binärbaum aus Aufgabe 4 die Preorder-, Inorder- und
Postorder-Ausgabe an.
b) Schreiben Sie eine DELPHI-Funktion, welche die Postorder-Ausgabe eines
Binärbaums bestimmt und in einem String zurückgibt. Benutzen Sie dabei
wann immer möglich die im Unterricht entwickelten Standardoperationen
(Anlage 1). Starten Sie mit dem folgenden Funktionskopf:
function PostOrder(b: PBinBaum): string;
var { hier kommen Ihre lokalen Variablen hin...
Begin
}
{ hier kommen Ihre DELPHI-Anweisungen hin... }
End;
3. INFORMATIK-KLAUSUR
Anlage 1:
{
{
{
{
{
{
{
{
{
{
{
{
{
{
{
{
{
{
{
{
{
{
{
{
{
{
{
{
{
{
{
{
{
{
{
{
{
{
{
{
{
{
{
{
{
{
{
{
{
{
{
{
{
{
{
{
{
{
{
IF-GK 12 (GA)
16.03.2000
− SEITE 3 −
--------------------------------------------------------------------------TOOL zum Datentyp Binärbaum:
- Filenamen: <B_BAUM.ADT>
<B_BAUM.TPU>
Es wird der Datentyp 'PBinBaum' bereitgestellt - einschließlich der für ihn
definierten Operationen, abhängig vom konkreten Datentyp TInhalt !!!
Name des Datentyps:
PBinBaum [
[
[
[
mit den Operationen:
[
Baum = leer (NIL) oder
Zeiger auf Wurzel + linker Teilbaum
+ rechter Teilbaum
wobei die Teilbäume u.U. auch
leer sein können
(Blatt!)
]
]
]
]
]
PROCEDURE InitBaum ( VAR baum: PBinBaum );
[ Einrichtung als leerer Baum (Initialisierung)
]
FUNCTION BaumLeer ( baum: PBinBaum ): Boolean;
[ ergibt TRUE gdw. der aktuelle Baum leer ist.
]
PROCEDURE LiesWurzel ( baum: PBinBaum; VAR inhalt: TInhalt );
[ der Wurzelinhalt eines nicht (!) leeren Baumes wird ]
[ der Inhaltsvariablen zugewiesen.
]
PROCEDURE HoleLinkenTeilbaum ( baum: PBinBaum; VAR teilbaum: PBinBaum );
PROCEDURE HoleRechtenTeilbaum ( baum: PBinBaum; VAR teilbaum: PBinBaum );
[ Von einem nicht (!) leeren Baum wird der Teilbaum- ]
[ variablen der bezeichnete Teilbaum zugewiesen. Der ]
[ Baum selbst bleibt davon unberührt.
]
PROCEDURE BelegeWurzelinhalt ( VAR baum: PBinBaum; inhalt: TInhalt );
[ einem nicht (!) leeren Baum wird der Wert der In]
[ haltsvariablen in die Wurzel geschrieben. Die Teil- ]
[ bäume bleiben davon unberührt.
]
PROCEDURE FuegeTeilbaumLinksAn ( VAR baum: PBinBaum;
teilbaum: PBinBaum );
PROCEDURE FuegeTeilbaumRechtsAn ( VAR baum: PBinBaum;
teilbaum: PBinBaum );
[ einem nicht (!) leeren Baum wird der genannte Teil- ]
[ baum angehängt. Die Teilbäume selbst müssen einge- ]
[ richtet sein, können allerdings auch leer sein. Die ]
[ Wurzel bleibt davon unberührt.
]
PROCEDURE ErzeugeBlatt ( VAR baum: PBinBaum; inhalt: TInhalt );
[ es wird ein Baum mit dem Wurzelwert der Inhaltsvari-]
[ ablen mit leeren Teilbäumen eingerichtet.
]
FUNCTION LinksLeer ( baum: PBinBaum ): Boolean;
FUNCTION RechtsLeer ( baum: PBinBaum ): Boolean;
[ ist TRUE, gdw. entsprechender Teilbäume leer ist.
]
FUNCTION IstBlatt ( baum: PBinBaum ): BOOLEAN;
[ TRUE, falls der nicht (!) leere Baum nur leere Teil-]
[
bäume besitzt.
]
PROCEDURE LoescheBlatt ( VAR baum: PBinBaum );
[ ein eingerichteter und nicht (!) leerer Baum mit
]
[ leeren Teilbäumen wird gelöscht, d.h. er wird leer. ]
[ Außerdem wird der benutzte Speicherraum wieder dem ]
[ System zur Verfügung gestellt.
]
PROCEDURE LoescheBaum ( VAR baum: PBinBaum );
[ ein eingerichteter Baum wird gelöscht. Ist der Baum ]
[ schon leer, so ist diese Operation ohne Funktion.
]
[ ACHTUNG: auch die Teilbäume werden gelöscht !
]
PROCEDURE ErsetzeDurchLinkenTeilbaum ( VAR baum: PBinBaum );
PROCEDURE ErsetzeDurchRechtenTeilbaum ( VAR baum: PBinBaum );
[ der jeweils andere Teilbaum wird, falls nötig, ge- ]
[ löscht und 'baum' wird ersetzt.
]
------------------------------- Version 1.0 D.Garmann / Bonn, am 22.02.2000
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
3. INFORMATIK-KLAUSUR
IF-GK 12 (GA)
16.03.2000
− SEITE 4 −
Anlage 2:
SuchLoeschen
Baum:
PBinBaum
ExistiertBereits:
wahr oder falsch
Inp-OBJEKT
Suchelement:
TInhalt
HILFSOBJ.
Wurzelkopie:
TInhalt
Teilbaum:
PBinBaum
• Falls der BaumLeer (Baum) ist,
dann
• ExistiertBereits ← falsch
sonst • LiesWurzel (Baum, Wurzelkopie)
• Falls Suchelement „gleich“ Wurzelkopie,
• dann • EchtLoeschen (Baum, Suchelement)
• ExistiertBereits ← wahr
• sonst • Falls Suchelement „kleiner“ Wurzelkopie,
• dann • HoleLinkenTeilbaum (Baum, Teilbaum)
• SuchLoeschen (Teilbaum, Suchelement, ExistiertBereits)
• FuegeTeilbaumLinksAn (Baum, Teilbaum)
• sonst • HoleRechtenTeilbaum (Baum, Teilbaum)
• SuchLoeschen (Teilbaum, Suchelement, ExistiertBereits)
• FuegeTeilbaumRechtsAn (Baum, Teilbaum)
ALGORITHMUS
I/O-OBJEKTE
EchtLoeschen
Baum:
PBinBaum
LoeschKnoten:
TInhalt
Teilbaum:
PBinBaum
Existiert:
wahr oder falsch
• Falls der Baum RechtsLeer (Baum) ist,
dann
• ErsetzeDurchLinkenTeilbaum (Baum)
sonst • Falls der Baum LinksLeer (Baum) ist,
• dann • ErsetzeDurchRechtenTeilbaum (Baum)
• sonst • HoleLinkenTeilbaum (Baum, Teilbaum)
• BestimmeGroesstesElement (Teilbaum, LoeschKnoten)
• BelegeWurzelinhalt (Baum, LoeschKnoten)
• SuchLoeschen (Teilbaum, LoeschKnoten, Existiert)
• FuegeTeilbaumLinksAn (Baum, Teilbaum)
ALGORITHMUS
I/O-OBJEKT
HILFSOBJ.
ALGORITHMUS
BestimmeGroesstesElement
I/O-OBJEKT
Element:
TInhalt
Inp-OBJEKT
Baum:
PBinBaum
HILFSOBJ.
Teilbaum:
PBinBaum
• Falls der Baum RechtsLeer (Baum) ist,
dann
• LiesWurzel (Baum, Element)
{ Element ← Wurzel von Baum}
sonst • HoleRechtenTeilbaum (Baum, Teilbaum)
• BestimmeGroesstesElement (Teilbaum, Element)
Herunterladen