21
Institut für Kartographie und Geoinformation Diskrete Mathematik I Vorlesung 7 25.11.99 -Binärer Suchbaum I-

Institut für Kartographie und Geoinformation Diskrete Mathematik I Vorlesung 7 25.11.99 -Binärer Suchbaum I-

Embed Size (px)

Citation preview

Institut für Kartographie und Geoinformation

Diskrete Mathematik IVorlesung 7

25.11.99

-Binärer Suchbaum I-

2

Übersicht

• Der Binäre Baum• Binärer Suchbaum

– Definition– Beispiel– Die Klasse Knoten– Die Klasse Binärer Suchbaum (BST)– FügeEin Rekursiv– Suchen von Knoten

3

Der Binäre Baum

• Ein leerer Baum ist ein binärer Baum• Sind L und R zwei binäre Bäume und w ein Knoten

mit dem Inhalt n, dann ist die Verknüpfungvon w, L und R ein binärer Baum.

n

L R

4

Binärer Suchbaum

• Ein binärer Baum B ist ein binärer Suchbaum, falls er leer ist oder die folgenden Eigenschaften erfüllt sind:

– die beiden Unterbäume sind binäre Suchbäume– die Beschriftungen der Knoten des linken Suchbaums sind

kleiner als die Beschriftung der Wurzel– die Beschriftungen des rechten Suchbaums sind größer als

die Beschriftung der Wurzel

n

<n >n

5

9 4 17 13 2 23 7

Binärer Suchbaum

Aufbau eines binären Suchbaums aus folgenden Elementen:

6

7 232 13

174

9

Binärer Suchbaum

7

Die Klasse Knoten

class Knoten {private int wert; private Knoten links, rechts;Knoten(int i) { wert = i; links = rechts = null; }void SetzeWert(int i) { wert = i; }int GibWert() { return wert }void SetzeLinks(Knoten k) { links = k; }Knoten GibLinks() { return links; }void SetzeRechts(Knoten k) { rechts = k; }Knoten GibRechts() { return rechts; }

}

8

Die Klasse Binärer Suchbaum (BST)

class BST {private Knoten Wurzel;class Knoten {...}BST() { wurzel = null; }void FügeEin(int i) {

wurzel = FügeEin(wurzel, i); }

}

Aufruf der rekursiven Prozedur

9

FügeEin Rekursiv

private Knoten FügeEin(Knoten aktuell, int ein) {if (aktuell == null) {aktuell = new Knoten(ein) else {if (ein < aktuell.GibWert()) aktuell.SetzeLinks(FügeEin(aktuell.GibLinks(), ein)); if (ein > aktuell.GibWert()) aktuell.SetzeRechts(FügeEin(aktuell.GibRechts(), ein));}return aktuell;

}

10

Suchen von Knoten

Suche einer Zahl k in einem binären Suchbaum B

• B ist leer– k kann nicht im Baum sein.

• B ist nicht leer– B.wert = k : k ist gefunden, d.h. bereits in B vorhanden.– B.wert < k : Suche im rechten Unterbaum von B.– B.wert > k : Suche im linken Unterbaum von B.

11

Suchen von Knoten

18149

10 24

16

13 15

• Suche für k = 15

12

Suchen von Knoten

18149

10 24

16

13 15

• Suche für k = 15

k < 16

13

Suchen von Knoten

18149

10 24

16

13 15

• Suche für k = 15

k > 10

14

Suchen von Knoten

18149

10 24

16

13 15

• Suche für k = 15

k > 14

15

Suchen von Knoten

18149

10 24

16

13 15

• Suche für k = 15

k = 15

16

Suchen von Knoten

• Suche für k = 11

18149

10 24

16

13 15

k < 16

17

Suchen von Knoten

• Suche für k = 11

18149

10 24

16

13 15

k > 10

18

Suchen von Knoten

18149

10 24

16

13 15

• Suche für k = 11

k < 14

19

Suchen von Knoten

• Suche für k = 11

k nicht vorhanden

18149

10 24

16

13 15

20

Suchen von Knoten

class BST { ... boolean Suche(int i) { return Suche(wurzel, i); } private boolean Suche(Knoten aktuell, int i) { boolean gefunden = false; if (aktuell != null) { gefunden = (aktuell.GibWert() == i) ; if (aktuell.GibWert() < i) gefunden = Suche(aktuell.GibRechts(), i); if (aktuell.GibWert() > i)

gefunden = Suche(aktuell.GibLinks(), i); } return gefunden; } ...}

Vergleich

Schönen Dank für Ihre Aufmerksamkeit und

Auf Wiedersehen