• Keine Ergebnisse gefunden

Wenn ein Knoten mehrere

N/A
N/A
Protected

Academic year: 2021

Aktie "Wenn ein Knoten mehrere "

Copied!
21
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

Bäume

Wenn ein Knoten mehrere

Nachfolger hat

(2)

Definition

„ Ein Baum ist eine endliche Menge B eines oder mehrerer Knoten

derart, dass

‹ Es ein ausgezeichnetes Element, Wurzel genannt, gibt

‹ Die übrigen Knoten in m≥0

disjunkte Mengen aufgeteilt sind und jede dieser Mengen

(Unterbäume) ein Baum ist

(3)

Bemerkungen

„ Die Definition ist rekursiv

„ Jeder Knoten eines Baums ist die

Wurzel eines Unterbaums

(4)

Terminologie

„ Ist K ein Knoten eines Baums so ist Grad(K) = Anzahl Unterbäume von B

„ Falls Grad(K) = 0 so heisst K Blattknoten

„ Ist B ein Baum und K ∈ B so ist

ZE(K, B) = 0 , falls K die Wurzel von B ist und falls K ∈ U für einen

Unterbaum U ist, so ist ZE(K,B) =

ZE(U,B) + 1

(5)

Terminologie (Fortsetzung)

„

Ist K ein Knoten und die Menge {B 1 , ..., B m } seine Unterbäume, so ist Grad(K) = m

„

K ist der Vater von B 1 , ..., Bm

„

Jeder B i ist der Sohn von K

„

Alle B i 's sind Brüder

„

Falls alle Bi für alle K in einer

bestimmten Reihenfolge vorliegen, so ist B geordnet

„

Ein Wald ist eine Menge von 0 oder

mehreren disjunkten Bäumen

(6)

Klassifizierung von Indo-europäische Sprachen

indo-europaeisch

italisch hellenisch germanisch

oskisch/umbrisch griechisch nordgermanisch west germanisch

oskisch umbrisch islandisch norwegisch schwedisch nieder

deutsch hoch

deutschYiddisch lateinisch

franz spanisch ital roumaen.

A

B C D

E F G H I

J K L M N O P Q R S T U

a)

(7)

Beispiel:

Abstammungsbaum

„ Bei Genealogien

‹ Ahnentafel: Von einer Person alle Vorfahren

‹ Stammtafel: Abstammung der

genealogischen Abfolge von einem Urahnen

„ Datenstrukturen verwenden zweite

Art von Baum

(8)

Definition

„ Ein Binärbaum B ist eine

geordnete endliche Menge von

Knoten , die entweder leer ist oder aus 2 Binärbäumen {B 1 ,B 2 }

besteht

„ B 1 heisst linker Unterbaum und B 2

heisst rechter Unterbaum von B

(9)

Bemerkungen

„ Die Definition eines Binärbaums ist rekursiv

„ Ein Binärbaum ist kein Sonderfall eines Baums

„ Ein Binärbaum ist geordnet

„ Ab jetzt sind alle Bäume

Binärbäume

(10)

Ein geordneter Baum

10

5 15

3 8

9

12 18

1 4 14

(11)

Programmdarstellung Binärbäume

„ Daten werden in gewöhnlicher DATA

Struktur gehalten

„ Beide Nachfolger jedes Knoten werden mit Zeiger verkettet

„ Leere Nachfolger werden mit

Zeigerwert NULL dargestellt

(12)

Die Datei baum.h

typedef ... DATA;

typedef struct Bknoten{

DATA d;

struct Bknoten *links;

struct Bknoten *rechts;

} BKNOTEN;

typedef BKNOTEN *BAUMZEIGER;

BAUMZEIGER Wurzel;

(13)

Einige Baumoperationen

„ Leere Baum initialisieren:

„ Baum mit 1 Knoten initialisieren:

„ Prüfe, ob der Baum leer ist:

„ Daten einfügen:

BAUMZEIGER initBaum()

BAUMZEIGER initBaum(DATA *)

int istLeer()

void einfuegen(BAUMZEIGER *, DATA);

(14)

Noch einige Baumoperationen

„ Linken Baum anheften:

„ Rechten Baum anheften:

„ Daten holen:

BAUMZEIGER linksSetzen(BAUMZEIGER, DATA *);

BAUMZEIGER rechtsSetzen(BAUMZEIGER, DATA *);

DATA getData(BAUMZEIGER);

(15)

Bemerkungen

„

Einige Operationen sind privat, da sie interne Operationen ausführen, z.B.

Linken Baum anheften

„

Nicht vergessen, der Baum ist nach einer vorgegebenen Regel geordnet, daher z.B. einfuegen ohne Knotenzeiger

„

Siehe Bild: Für jeden Knoten sind alle

Daten links kleiner und alle Daten rechts

größer als die Daten des Knotens

(16)

Operation: Einfügen eines Knoten

void einfuegen(BAUMZEIGER *WurzelPtr, DATA *dataPtr){

if ( *WurzelPtr == NULL){

*WurzelPtr = (BAUMZEIGER)malloc(sizeof(BKNOTEN));

(*WurzelPtr)->d = *dataPtr;

(*WurzelPtr)->links = (*WurzelPtr)->rechts = NULL;}

else if (*dataPtr < (*WurzelPtr)->d)

einfuegen(&((*WurzelPtr)->links), dataPtr);

else if (*dataPtr > (*WurzelPtr)->d)

einfuegen(&((*WurzelPtr)->rechts), dataPtr);

else fprintf(stderr, "Element is bereits vorhanden\n");

}

(17)

Bemerkungen

„

Diese Funktion wurde rekursiv realisiert

„

Knoten werden immer am Rande des Baums (d.h. bei Blattknoten) eingefügt

„

Die Adresse des Knotenzeigers muss übergeben werden

„

Eine Funktion void einfuegen(DATA)

könnte diese private Funktion verwenden

(18)

Durchlauf eines Binärbaums

„ Preorder

‹ Wurzel besuchen

‹ linken Teilbaum besuchen

‹ rechten Teilbaum besuchen

„ Inorder

‹ linken Teilbaum besuchen

‹ Wurzel besuchen

‹ rechten Teilbaum besuchen

(19)

Durchlauf eines Binärbaums (Fortsetzung)

„ Postorder

‹ linken Teilbaum besuchen

‹ rechten Teilbaum besuchen

‹ Wurzel besuchen

(20)

Beispielprogramm

Siehe Folie

(21)

Beispiel: Ausdruck (A-B*C)*(D+E/F)

*

- +

A *

C

D /

B F

„ Preorder: *-A*BC+D/EF

„ Inorder: A-B*C*D+E/F

Postorder: ABC*-DEF/+*

Referenzen

ÄHNLICHE DOKUMENTE

Technische Universität München, Fakultät für Medizin, Klinik und Poliklinik für Derma- tologie und

Ein grosses Potenzial für Smart Services leitet sich laut Rohner auch in den Berei- chen des Bauwerkmonitorings, der Türen, Fenster und Fassaden ab, ebenso bei Smart

Für alle Nutzer, insbesondere aber für Nutzer, die nicht aus den traditionellen Geodisziplinen stam- men, muss Transparenz über das Geodaten-Angebot geschaffen werden:

Für eine Klasse von Lernaufgaben gibt es mindestens eine Menge E, die zerschmettert werden kann – NICHT jede Menge E kann zerschmettert werden.. Zum Beweis der VC Dimension n muss

Wenn wir auch heute wissen, daß diese Tanks neben ihren Erfolgen auch große Mißerfolge zu verzeichnen hatten, so dürfen wir nicht vergessen, daß man zunächst über die Verwendung

• Dezimaldarstellung als Folge von Ziffern mit oder ohne Dezimalpunkt, gefolgt vom. Exponententeil, eingeleitet durch Buchstabe

 Der eigentliche Gewinn durch XML entsteht durch die Standardisierung einer Sprache zur Definition

Vor wenigen Jahren haben sich GI und GMDS entschlossen, einen gemeinsamen Fachbereich mit dem Thema Informatik in den Lebenswissenschaften einzurichten.. Dieser