Binäre Bäume. 1. Allgemeines. 2. Funktionsweise. 2.1 Eintragen

Ähnliche Dokumente
1 Vom Problem zum Programm

Anleitung über den Umgang mit Schildern

Professionelle Seminare im Bereich MS-Office

Internationales Altkatholisches Laienforum

Kapiteltests zum Leitprogramm Binäre Suchbäume

1 topologisches Sortieren

Was man mit dem Computer alles machen kann

Handbuch zur Anlage von Turnieren auf der NÖEV-Homepage

Lineargleichungssysteme: Additions-/ Subtraktionsverfahren

Handbuch. NAFI Online-Spezial. Kunden- / Datenverwaltung. 1. Auflage. (Stand: )

Der Kalender im ipad

Stellen Sie bitte den Cursor in die Spalte B2 und rufen die Funktion Sverweis auf. Es öffnet sich folgendes Dialogfenster

Anlegen eines DLRG Accounts

Um unsere Gemeindewebseite für Ihre Zwecke zu nutzen, haben Sie folgende Möglichkeiten:

Um die Patientenverwaltung von Sesam zu nutzen, muss man die Patienten natürlich zuerst in die Kartei eintragen.

Mit der Maus im Menü links auf den Menüpunkt 'Seiten' gehen und auf 'Erstellen klicken.

Kurzanleitung MAN E-Learning (WBT)

Grundlagen der Theoretischen Informatik, SoSe 2008

Erklärung zu den Internet-Seiten von

7DVWH.HOOQHU. Kassensystem SANYO (X&D6RIWKapitel 42

Algorithmik II. a) Fügen Sie in einen anfangs leeren binären Baum die Schlüsselfolge 20, 28, 35, 31, 9, 4, 13, 17, 37, 25 ein.

Leichte-Sprache-Bilder

Anwendungsbeispiele Buchhaltung

Einführung in die Programmierung Laborübung bei Korcan Y. Kirkici. 12.Übung bis

Schritt 1 - Registrierung und Anmeldung

Erklärung zum Internet-Bestellschein

Kurze Benutzungsanleitung für Dozenten

Artikel Schnittstelle über CSV

Erweiterung der Aufgabe. Die Notenberechnung soll nicht nur für einen Schüler, sondern für bis zu 35 Schüler gehen:

Schritt 1. Anmelden. Klicken Sie auf die Schaltfläche Anmelden

Einfügen von Bildern innerhalb eines Beitrages

Sich einen eigenen Blog anzulegen, ist gar nicht so schwer. Es gibt verschiedene Anbieter. ist einer davon.

Handbuch. Adressen und Adressenpflege

ARCO Software - Anleitung zur Umstellung der MWSt

Anleitung zum Login. über die Mediteam- Homepage und zur Pflege von Praxisnachrichten

Nicht über uns ohne uns

INTERNET UND MMS MIT DEM QTEK2020 MARCO 28. MÄRZ 04

Wenn man nach Beendigung der WINDOWS-SICHERUNG folgendes angezeigt bekommt

Was meinen die Leute eigentlich mit: Grexit?

Festplatte defragmentieren Internetspuren und temporäre Dateien löschen

Anleitung zur Konfiguration eines NO-IP DynDNS-Accounts mit der TOOLBOXflex-3.2

Wie Sie sich einen eigenen Blog einrichten können

Handbuch für Easy Mail in Leicht Lesen

Anwendungsbeispiele Buchhaltung

Dokumentation für das Spiel Pong

Jede Zahl muss dabei einzeln umgerechnet werden. Beginnen wir also ganz am Anfang mit der Zahl,192.

SAMMEL DEINE IDENTITÄTEN::: NINA FRANK :: :: WINTERSEMESTER 08 09

Berechnungen in Access Teil I

1. Adressen für den Serienversand (Briefe Katalogdruck Werbung/Anfrage ) auswählen. Die Auswahl kann gespeichert werden.

Datenbanken Kapitel 2

Fallbeispiel: Eintragen einer Behandlung

SICHERN DER FAVORITEN

Platinen mit dem HP CLJ 1600 direkt bedrucken ohne Tonertransferverfahren

Anzeige von eingescannten Rechnungen

Algorithmen und Datenstrukturen

Das sogenannte Beamen ist auch in EEP möglich ohne das Zusatzprogramm Beamer. Zwar etwas umständlicher aber es funktioniert

Erstellen von x-y-diagrammen in OpenOffice.calc

Die Post hat eine Umfrage gemacht

Software Engineering Klassendiagramme Assoziationen

Wie kann ich mein Profil pflegen und/oder ihm ein PDF hinzufügen? Sie vermissen die Antwort auf IHRE Frage? Bitte lassen Sie uns Ihnen weiterhelfen:

Fotostammtisch-Schaumburg

M. Graefenhan Übungen zu C. Blatt 3. Musterlösung

Satzhilfen Publisher Seite Einrichten

4. Jeder Knoten hat höchstens zwei Kinder, ein linkes und ein rechtes.

Anleitung, WebRecherche

Geld Verdienen im Internet leicht gemacht

Binäre Bäume Darstellung und Traversierung

Anleitung zur Erstellung von Serienbriefen (Word 2003) unter Berücksichtigung von Titeln (wie Dr., Dr. med. usw.)

Erstellen eines Screenshot

Objektorientierte Programmierung für Anfänger am Beispiel PHP

EINFACHES HAUSHALT- KASSABUCH

Würfelt man dabei je genau 10 - mal eine 1, 2, 3, 4, 5 und 6, so beträgt die Anzahl. der verschiedenen Reihenfolgen, in denen man dies tun kann, 60!.

mit dem TeXnicCenter von Andreas Both

1. Einführung Erstellung einer Teillieferung Erstellung einer Teilrechnung 6

mysql - Clients MySQL - Abfragen eine serverbasierenden Datenbank

Partitionieren in Vista und Windows 7/8

Welche Bereiche gibt es auf der Internetseite vom Bundes-Aufsichtsamt für Flugsicherung?

Computeria Rorschach Mit Excel Diagramme erstellen

icloud nicht neu, aber doch irgendwie anders

NetStream Helpdesk-Online. Verwalten und erstellen Sie Ihre eigenen Tickets

Urlaubsregel in David

Arbeiten mit dem Outlook Add-In

Repetitionsaufgaben Wurzelgleichungen

1 Einleitung. Lernziele. Symbolleiste für den Schnellzugriff anpassen. Notizenseiten drucken. eine Präsentation abwärtskompatibel speichern

allensbacher berichte

Ein Buch entsteht. Ein langer Weg

Hilfedatei der Oden$-Börse Stand Juni 2014

Anleitung für das Content Management System

Erste Schritte mit CVP 9.0

Windows. Workshop Internet-Explorer: Arbeiten mit Favoriten, Teil 1

Anwendungsbeispiele. Neuerungen in den s. Webling ist ein Produkt der Firma:

Ohne Fehler geht es nicht Doch wie viele Fehler sind erlaubt?

Zahlenwinkel: Forscherkarte 1. alleine. Zahlenwinkel: Forschertipp 1

Das Freiwillige Soziale Jahr. Der Bundes-Freiwilligen-Dienst

Das Persönliche Budget in verständlicher Sprache

Outlook. sysplus.ch outlook - mail-grundlagen Seite 1/8. Mail-Grundlagen. Posteingang

Informationen zu den regionalen Startseiten

etoken mit Thunderbird verwenden

Den Durchblick haben. VOLKSBANK BAD MÜNDER eg. Online aber sicher: Unsere Produkt- und Sicherheitshotline hilft und informiert

Transkript:

Binäre Bäume 1. Allgemeines Binäre Bäume werden grundsätzlich verwendet, um Zahlen der Größe nach, oder Wörter dem Alphabet nach zu sortieren. Dem einfacheren Verständnis zu Liebe werde ich mich hier besonders auf die Zahlen beziehen, doch mit Buchstaben besteht in der Funktionsweise kein Unterschied. Zur Definition einiger Begriffe: Knoten bzw. Knotenpunkte sind die Stellen, wo die Zahlen eingetragen werden. Wurzel wird der aller oberste Knoten genannt. Verzweigungen sind die Verweise eines Knoten auf seinen linken oder rechten Nachfolgers. Als Tiefe wird bei den Binären Bäumen die Anzahl der Knotenpunkte bis zum tiefsten Element genannt. Nimmt man n als Tiefe an, so kann ein binärer Baum maximal 2 n - 1 Knoten haben. 2. Funktionsweise 2.1 Eintragen Das Prinzip basiert darauf, daß eine Zahl immer auf zwei weitere verweist, eine größere rechts und eine kleinere links. Die erste Zahl, die eingelesen wurde, dient als Wurzel. Von ihr gehen dann die weiteren Verzweigungen aus. Bei der nächsten Zahl vergleicht man diese mit der Wurzel. Seite 1

Ist die neue Zahl kleiner als die Wurzel, folgt man dem linken Zweig, ist sie größer, dem Rechten. Steht dort wieder eine Zahl, wird wieder verglichen, bis man an einem freien Platz angekommen ist. Hat man einen freien Platz erreicht, kann die Zahl eingetragen werden. 2.2 Ausgeben Möchte man nun die Zahlen ausgeben, fängt man wieder bei der Wurzel an. Sollen die Zahlen aufwärts sortiert ausgegeben werden, geht man den linken Verzweigungen nach, solange dies möglich ist. Ist man am äußersten linken Punkt angekommen, ist dies nun die niedrigste Zahl. Danach geht man eine Verzweigung zurück und nimmt diese Zahl, dann wird deren rechter Zweig abgearbeitet, wobei dort wieder zuerst nach links gegangen werden muß. Nachdem auch der rechte Zweig abgeschlossen wurde, geht man eine weitere Verzweigung zurück und macht das selbe noch einmal. Sollen die Zahlen abwärts sortiert ausgegeben werden, muß man nur die Instruktionen im oberen Absatz befolgen, wobei man aber links und rechts vertauscht. Das heißt man geht zuerst zum äußersten rechten Knoten, usw. Sucht man eine bestimmte Zahl braucht man nur an jedem Knotenpunkt vergleichen, ob diese Zahl größer oder kleiner ist, und geht dem entsprechend der linken (Zahl ist kleiner als Knoten) oder der rechten (Zahl ist größer als Knoten) Verzweigung nach, bis die Zahl gefunden wurde, oder die Verzweigung auf NICHTS (bzw. NULL) verweist. 3. Programmierung Binäre Bäume werden mit Hilfe von Pointern programmiert. Jeder Knotenpunkt beinhaltet die eigene Adresse, die darin gespeicherte Zahl, einen Zeiger für den linken Zweig und einen weiteren für den rechten Zweig. Da das Umgehen mit Pointern in C noch am einfachsten ist und diese Programmiersprache noch halbwegs aktuell ist, sind die unten angeführten Beispiele in dieser Sprache geschrieben. 3.1 Einfügen Die Prozedur für das Einfügen ist der, in Kapitel 3.3 über das Löschen beschriebenen teilweise ähnlich. In beiden Prozeduren lasse ich eine Hilfsvariable nachlaufen. void eingeben (struct knoten *akt, int x); struct knoten *hilfe; if (akt => zahl!= x) if (akt => zahl > x) Seite 2

eingeben (akt => links, x); if (akt => zahl < x) eingeben (akt => rechts, x); akt = malloc (struct knoten); akt => rechts = NULL; akt => links = NULL; akt => zahl = x; if (hilf => zahl < x) hilf => rechts = akt; hilf => links = akt; 3.2 Ausgeben Man kann sich die Zahlen natürlich auf mehrere Arten ausgeben lassen. Doch ich möchte nur zwei, die wahrscheinlich am häufigsten verwendet werden, zeigen. Möchte man die Zahlen geordnet ausgeben, kann man folgende Prozedur benutzen, wobei akt bei Aufruf der Prozedur auf die Wurzel zeigen sollte: void ausgabe (struct knoten *akt); ausgabe (akt => links); printf ("%d \n", akt => zahl); ausgabe (akt => rechts); Seite 3

Hat man sich, wie in Kapitel 3.4 beschrieben, die Tiefe eines binären Baumes bereits ausgerechnet, kann man die folgende Funktion verwenden, um den Baum in strukturierter Form darzustellen: void ausgabe (struct knoten *akt, int tiefe); int i; ausgabe (akt => rechts, ++ tiefe); for (i = 1; i < tiefe; i++) printf (" "); printf ("%d \n", akt => zahl); ausgabe (akt => links, tiefe); Die ausgegebenen Daten sehen nach Aufruf der zweiten Prozedur aus, wie ein gekippter binärer Baum (d.h. wie um 90 gedreht). 3.3 Löschen Löschen ist der schwierigste Bereich bei den binären Bäumen. Aus diesem Grund muß eine Hilfsvariable verwendet werden, welche dem anderen Pointer immer um einen Knoten hinten nach ist. void löschen (struct knoten *akt, int x); struct knoten *hilfe; if (akt => zahl!= x) if (akt => zahl > x) löschen (akt => links, x); if (akt => zahl < x) löschen (akt => rechts, x); Seite 4

if (hilf => rechts == akt) if (akt => rechts!= NULL) hilf => rechts = akt => rechts; hilf = hilf => rechts; for (hilf = hilf; hilf => links!= NULL; hilf = hilf => links); hilf => links = akt => links; hilf => rechts = akt => links; free (akt); if (hilf =>links == akt) if ( akt=>links!= NULL) hilf => links = akt => links; hilf = hilf => links; for (hilf = hilf; hilf => rechts!= NULL; hilf = hilf => rechts); hilf => rechts = akt => rechts; hilf => links = akt => rechts; free (akt); free (akt); 3.4 Tiefe berechnen Die folgende Funktion liefert als Retourwert die Tiefe eines binären Baumes. An die Funktion muß beim Aufruf bloß die Wurzel als Parameter übergeben werden. int tiefe (ptr *akt); int tl, tr; if (akt = = NULL) return (0) Seite 5

tl=tiefe (akt => links); tr=tiefe (akt => rechts); if (tl > tr ) return (tl + 1) return (tr + 1); 4. Sonstige Verwendungsmöglichkeiten für binäre Bäume Ein binärer Baum kann auch dazu verwendet werden, um dyadische Operatoren darzustellen. Dies könnte im folgenden so aussehen: (a + b / c) * (d - e * f) Es gibt 3 Bearbeitungsarten: 1. PRÄFIX: root before node z.b.: * + a / b c - d * e f 2. INFIX: subtree root subtree z.b.: a + b / c * d - e * f 3.POSTFIX: subtrees before root z.b.: a b c / + d e f * - * Seite 6