www.wikidata.de-de.nina.az
Binarbaume sind in der Informatik die am haufigsten verwendete Unterart der Baume Im Gegensatz zu anderen Arten von Baumen konnen die Knoten eines Binarbaumes nur hochstens zwei direkte Nachkommen haben Meist wird verlangt dass sich die Kindknoten eindeutig in linkes und rechtes Kind einteilen lassen Ein anschauliches Beispiel fur einen solchen Binarbaum ist die Ahnentafel bei der allerdings die Elternteile durch die Kindknoten zu modellieren sind Ein Binarbaum ist entweder leer oder er besteht aus einer Wurzel mit einem linken und rechten Teilbaum die wiederum Binarbaume sind Ist ein Teilbaum leer bezeichnet man den entsprechenden Kindknoten als fehlend Meistens wird die Wurzel in graphischen Darstellungen wie in der nebenstehenden oben und die Blatter unten platziert Entsprechend ist ein Weg von der Wurzel in Richtung Blatt einer von oben nach unten Inhaltsverzeichnis 1 Begriffe 2 Eigenschaften 3 Kombinatorik 4 Anwendungen 4 1 Binarer Suchbaum 4 2 Partiell geordneter Baum 4 3 Vollstandiger Binarbaum und vollstandig balancierter Binarbaum 4 4 Weitere Binarbaume 5 Reprasentation und Zugriff 5 1 In Order Index 5 2 Links Rechts Index 5 3 Reprasentation durch ein Array 6 Traversierung 6 1 Tiefensuche 6 1 1 Rekursive Implementierungen 6 1 2 Iterative Implementierung 6 2 Breitensuche 7 Abstieg zum ersten oder letzten Element 8 Einfugen Einfugepunkt 9 Loschen 10 Rotation 10 1 Komplexitat 10 2 Doppelrotation 10 3 Rotationsmetrik 11 Umwandeln einer Form eines Binarbaums in eine andere 12 Siehe auch 13 Literatur 14 Weblinks 15 EinzelnachweiseBegriffe Bearbeiten nbsp Binarbaum mit Knotentypenzu finden bei Rot Schwarz BaumenDie Begriffe Knoten und Kante werden von den Graphen ubernommen Die Kante ist definitionsgemass gerichtet auch Bogen oder Pfeil Wenn es aus dem Kontext klar genug hervorgeht wird auch nur von Kante gesprochen Bei gerichteten Graphen kann man einem Knoten sowohl Ausgangsgrad wie Eingangsgrad zuordnen Ublicherweise werden Binarbaume als Out Trees aufgefasst In einem solchen gewurzelten Baum gibt es genau einen Knoten der den Eingangsgrad 0 hat Er wird als die Wurzel bezeichnet Alle anderen Knoten haben den Eingangsgrad 1 Der Ausgangsgrad ist die Anzahl der Kindknoten und ist beim Binarbaum auf maximal zwei beschrankt Damit ist seine Ordnung als Out Tree 2 Knoten mit Ausgangsgrad 1 bezeichnet man als innere Knoten solche mit Ausgangsgrad 0 als Blatter oder aussere Knoten nbsp Binarbaum mit KnotentypenVielfach findet sich in der Literatur auch eine Sichtweise bei der alle Knoten Information tragen und externe Blatter nicht vorkommen Dann gibt es bei Binarbaumen und nur dort gelegentlich die Bezeichnung Halbblatt fur einen Knoten mit Ausgangsgrad 1 englisch manchmal non branching node Die Hohe eines gewurzelten Baums ist die maximal auftretende Tiefe Viele Autoren setzen sie aber um eins hoher da man so dem leeren Baum die Hohe 0 und dem nur aus der Wurzel bestehenden Baum die Hohe 1 geben kann was gewisse rekursive Definitionen kurzer zu fassen gestattet Und da Tiefe ein Attribut eines Knotens Hohe aber eines des ganzen Baums ist muss es nicht unbedingt Verwirrungen geben 1 Zur BeachtungIn diesem Artikel ist die letztere Sichtweise durchgehalten Alle Knoten einschliesslich Wurzel und Blatter tragen Information knotenorientierte Speicherung Die Hohe des Baums ist die Maximalzahl der Knotenebenen Ein Binarbaum heisst geordnet wenn jeder innere Knoten ein linkes und eventuell zusatzlich ein rechtes Kind besitzt und nicht etwa nur ein rechtes Kind sowie der linke Knoten kleiner der rechte Knoten grosser als der Betrachtungsknoten ist Man bezeichnet ihn als voll wenn jeder Knoten entweder Blatt ist also kein Kind besitzt oder aber zwei also sowohl ein linkes wie ein rechtes Kinder besitzt es also kein Halbblatt gibt Fur die Eigenschaft voll werden gelegentlich auch die Begriffe saturiert oder strikt verwendet Man bezeichnet volle Binarbaume als vollstandig wenn alle Blatter die gleiche Tiefe haben wobei die Tiefe eines Knotens als die Anzahl der Bogen bis zur Wurzel definiert ist Der Binarbaum wird entartet genannt wenn jeder Knoten entweder Blatt ist Anzahl Kinder ist 0 oder Halbblatt Anzahl Kinder ist 1 In diesem Fall stellt der Baum eine Liste dar Besondere Formen sind die geordneten Listen bei denen ein Baum jeweils nur aus linken oder nur aus rechten Kindern besteht Eigenschaften BearbeitenSo wie ein Baum mit n displaystyle n nbsp Knoten n 1 displaystyle n 1 nbsp Kanten hat hat ein Binarbaum mit n displaystyle n nbsp Knoten n 1 displaystyle n 1 nbsp Kanten Ein Binarbaum mit n displaystyle n nbsp Knoten hat n 1 displaystyle n 1 nbsp unmittelbare Einfugepunkte Ein Binarbaum mit b displaystyle b nbsp Blattern und c displaystyle c nbsp Halbblattern hat an jedem Halbblatt einen Einfugepunkt und an jedem Blatt zwei also 2 b c displaystyle 2b c nbsp unmittelbare Einfugepunkte Ist i displaystyle i nbsp die Anzahl der inneren Knoten so errechnet sich i b 1 displaystyle i b 1 nbsp Kombinatorik BearbeitenDie Anzahl der Binarbaume mit n displaystyle n nbsp Knoten entspricht der Anzahl der Moglichkeiten eine Zeichenfolge von n 1 displaystyle n 1 nbsp geordneten Symbolen die durch n displaystyle n nbsp mathematische Operatoren fur eine zweistellige Verknupfung zum Beispiel Addition Subtraktion Multiplikation oder Division getrennt sind vollstandig in Klammern zu setzen Die Reihenfolge der Zahlen oder Elemente zum Beispiel Matrizen ist festgelegt Die Operation muss weder assoziativ noch kommutativ sein Dabei entspricht jeder Knoten einer zweistelligen Verknupfung und fur jeden Knoten entspricht der linke Teilbaum dem linken Ausdruck und der rechte Teilbaum dem rechten Ausdruck der Verknupfung Zum Beispiel muss man fur n 3 displaystyle n 3 nbsp eine Zeichenfolge wie X X X X displaystyle X X X X nbsp in Klammern setzen was auf funf verschiedene Arten moglich ist X X X X X X X X X X X X X X X X X X X X displaystyle X X X X qquad X X X X qquad X X X X qquad X X X X qquad X X X X nbsp Ein explizites Beispiel fur die Subtraktion ist 10 6 3 1 10 6 3 1 10 6 3 1 10 6 3 1 10 6 3 1 displaystyle 10 6 3 1 qquad 10 6 3 1 qquad 10 6 3 1 qquad 10 6 3 1 qquad 10 6 3 1 nbsp Das Hinzufugen redundanter Klammern um einen bereits in Klammern gesetzten Ausdruck oder um den vollstandigen Ausdruck herum ist nicht zulassig Es gibt einen Binarbaum mit 0 Knoten und jeder andere Binarbaum ist durch die Kombination aus seinem linken und seinem rechten Teilbaum gekennzeichnet Wenn diese Teilbaume i displaystyle i nbsp bzw j displaystyle j nbsp Knoten haben hat der gesamte Baum die i j 1 displaystyle i j 1 nbsp Knoten Daher hat die Anzahl C n displaystyle C n nbsp von Binarbaumen mit n displaystyle n nbsp Knoten die folgende rekursive Beschreibung C 0 1 displaystyle C 0 1 nbsp und C n i 0 n 1 C i C n 1 i displaystyle textstyle C n sum i 0 n 1 C i cdot C n 1 i nbsp fur jede positive ganze Zahl n displaystyle n nbsp Daraus folgt dass C n displaystyle C n nbsp die Catalan Zahl mit Index n displaystyle n nbsp ist Es gilt C n 1 n 1 2 n n 2 n n 1 n displaystyle C n frac 1 n 1 cdot binom 2 cdot n n frac 2 cdot n n 1 cdot n nbsp Anzahl der Binarbaumen Cn1 12 23 54 145 426 1327 4298 1430Anwendungen BearbeitenBinarer Suchbaum Bearbeiten Die in der Praxis wohl wichtigste Anwendung der Binarbaume sind die binaren Suchbaume worunter die AVL Baume Rot Schwarz Baume und Splay Baume zu rechnen sind Bei Suchbaumen gibt es in jedem Knoten Schlussel nach denen die Knoten linear im Baum geordnet sind Auf dieser Ordnung basiert dann ein moglichst effizientes Suchen Partiell geordneter Baum Bearbeiten Ein partiell geordneter Baum T ist ein spezieller Baum dessen Knoten markiert sind dessen Markierungen aus einem geordneten Wertebereich stammen in dem fur jeden Teilbaum U mit der Wurzel x gilt Alle Knoten aus U sind grosser markiert als x oder gleich x Intuitiv bedeutet dies Die Wurzel jedes Teilbaumes stellt ein Minimum fur diesen Teilbaum dar Die Werte des Teilbaumes nehmen in Richtung der Blatter zu oder bleiben gleich Derartige Baume werden haufig in Heaps verwendet Vollstandiger Binarbaum und vollstandig balancierter Binarbaum Bearbeiten Ein vollstandiger Binarbaum ist ein voller Binarbaum alle Knoten haben entweder 2 oder 0 Kinder in dem alle Blatter die gleiche Tiefe haben Induktiv lasst sich zeigen dass ein vollstandiger Binarbaum der Hohe h 1 displaystyle h geq 1 nbsp den man haufig als B h displaystyle B h nbsp bezeichnet genau 2 h 1 displaystyle 2 h 1 nbsp Knoten 2 h 1 1 displaystyle 2 h 1 1 nbsp innere Knoten nicht Blatt aber evtl Wurzel 2 t displaystyle 2 t nbsp Knoten in Tiefe t displaystyle t nbsp fur 0 t h 1 displaystyle 0 leq t leq h 1 nbsp insbesondere also 2 h 1 displaystyle 2 h 1 nbsp Blatterbesitzt Ein vollstandig balancierter Binarbaum ist ein voller Binarbaum bei dem die Abstande von der Wurzel zu zwei beliebigen Blattern um hochstens 1 voneinander abweichen Ein vollstandiger Binarbaum ist ein vollstandig balancierter Binarbaum Vergleiche Balancierter Baum und AVL Baum Weitere Binarbaume Bearbeiten Eine Darstellung eines Binarbaumes in dem die Knoten mit rechtwinkligen Dreiecken und die Bogen mit Rechtecken dargestellt werden nennt man pythagoreischen Binarbaum Auch Fibonacci Baume und binare Heaps basieren auf Binarbaumen Reprasentation und Zugriff Bearbeiten nbsp Darstellung eines Binarbaums im SpeicherDie Abbildung zeigt eine naheliegende Art der Speicherung Sie entspricht in etwa den C Strukturen struct knoten 1 Objekt 1 Knoten char schlussel struct knoten links linkes Kind struct knoten rechts rechtes Kind object struct knoten anker Zeiger auf die Wurzel Zur besseren Unterscheidung der Objekte sind diese beziehentlich mit den Schlusseln F G J und P versehen Diese Schlussel sind auch der Einfachheit halber als Ziel der Verweise genommen worden anstelle von echten Speicheradressen Wie ublich soll ein Zeigerwert 0 ausdrucken dass auf kein Objekt verwiesen wird es also kein Kind an dieser Stelle gibt Der grosse Vorteil des Baums gegenuber dem Array liegt in der flexibleren Speicherverwaltung Mit dem Entstehen oder Vergehen eines Objektes kann auch der es darstellende Speicher entstehen oder vergehen wogegen die einzelnen Eintrage beim Array fest mit diesem verbunden sind In Order Index Bearbeiten Wird in jedem Knoten die Anzahl der Elemente des zugehorigen Unterbaums gehalten kann das Aufsuchen eines Elements vermoge seines in order Index in ganz ahnlicher Weise wie das Aufsuchen mit einem Schlussel im binaren Suchbaum bewerkstelligt werden Dies hat allerdings die nachteilige Implikation dass Einfuge und Loschoperation immer Korrekturen bis hinauf zur Wurzel erfordern womit sich dann auch die in order Indizes von Knoten andern Die Vorgehensweise durfte also bei nicht statischen Binarbaumen von fraglichem Wert sein und bei statischen ist der gewohnliche Array Index in Bezug auf Laufzeit uberlegen Der Aufwand ist O h displaystyle mathcal O h nbsp wobei h displaystyle h nbsp die Hohe des Baums ist Links Rechts Index Bearbeiten Jeder Knoten kann durch eine variabel lange Kette von Binarziffern genau spezifiziert werden Die Massgabe konnte folgendermassen lauten Eine 0 am Anfang gleichzeitig Ende entspricht dem leeren Binarbaum Eine 1 am Anfang lasst auf die Wurzel zugreifen Eine anschliessende 0 bzw 1 lasst auf das linke bzw rechte Kind zugreifen Jedem Knoten in einem Binarbaum kann so eindeutig eine Binarkette zugeordnet werden Bei hohen balancierten Baumen ist die Binarkette in ihrer Lange durch O log n displaystyle mathcal O log n nbsp beschrankt so dass sie in ein vorzeichenloses Integer passen mag Eine denkbare Codierung der variablen Lange in einem Wort fester Lange lasst die Binarkette nach der ersten 1 beginnen Der maximale Aufwand fur einen Zugriff ist O h displaystyle mathcal O h nbsp nbsp Binarbaum mit Arrayindizes an den KnotenReprasentation durch ein Array Bearbeiten Ein Binarbaum kann durch ein Array reprasentiert werden dessen Lange im Wesentlichen der Anzahl der Knoten des Baumes entspricht genauer 2 h 1 displaystyle 2 h 1 nbsp mit h displaystyle h nbsp als der Hohe des Baumes Eine Anordnung findet sich bei der binaren Suche im Array Eine andere Art der Reprasentation beginnt mit der Indizierung bei 1 mit Verweis auf die Wurzel Dann setzt sie sich zeilenweise fort alle Knoten derselben Tiefe werden von links nach rechts fortlaufend nummeriert Das heisst das Auslesen des Arrays von links entspricht einem Level Order Traversal oder Breadth First Traversal des Baums Falls der Binarbaum nicht voll besetzt ist mussen ausgelassene Knoten durch Platzhalter besetzt werden so dass also 2 h 1 n displaystyle 2 h 1 n nbsp Speicherzellen verschwendet werden nbsp Beispiel fur die implizite Darstellung eines Binarbaums in einem Array mit Startindex 1 Diese Nummerierung hat die angenehme Eigenschaft dass man leicht die Indizes der verbundenen Knoten berechnen kann Im Array A displaystyle A nbsp sei A i displaystyle A i nbsp ein Knoten dann ist A 2 i displaystyle A 2i nbsp sein linkes und A 2 i 1 displaystyle A 2i 1 nbsp sein rechtes Kind die abgerundete Halfte j i 2 displaystyle j lfloor tfrac i 2 rfloor nbsp verweist auf den Elter A j displaystyle A j nbsp In der Genealogie ist dieses Indizierungsschema auch unter dem Begriff Kekule Nummerierung bekannt Da bei der Abbildung von einem Binaren Baum in ein Array keine expliziten Zeiger auf Kinder bzw Elter Knoten notwendig sind wird diese Datenstruktur auch als implizite Datenstruktur bezeichnet Eine Anwendung dieser Darstellung ist der binare Heap der fur die Sortierung von Elementen verwendet wird Traversierung BearbeitenTraversierung bezeichnet das systematische Untersuchen der Knoten des Baumes in einer bestimmten Reihenfolge Von den verschiedenen Moglichkeiten die Knoten von Binarbaumen zu durchlaufen unterscheidet man vor allem die folgenden Varianten 2 Tiefensuche Bearbeiten nbsp DFS depth first Traversierung eines Binarbaums Volle Abfolge der Schlussel 5 2 1 0 0 0 1 1 2 4 3 3 3 4 4 2 5 8 6 6 7 7 7 6 8 9 9 X X X 9 8 5 Pre order N LR N in roter Position 5 2 1 0 4 3 8 6 7 9 X In order LN R N in gruner Position 0 1 2 3 4 5 6 7 8 9 X Post order LRN N in blauer Position 0 1 3 4 2 7 6 X 9 8 5 Siehe auch Tiefensuche Bei der Tiefensuche wird ein Pfad zunachst vollstandig in die Tiefe depth first abgearbeitet bevor aufsteigend die Seitenzweige bearbeitet werden Die Umlaufrichtung um den Baum ist standardmassig entgegen dem Uhrzeigersinn d h der linke Teilbaum L wird vor dem rechten R jeweils rekursiv durchlaufen die umgekehrte Umlaufrichtung wird als reverse bezeichnet Abhangig davon an welcher Stelle vor zwischen oder nach L R der aktuelle Knoten N betrachtet wird unterscheidet man folgende Falle pre order oder Hauptreihenfolge N L R Zuerst wird der Knoten N betrachtet und anschliessend der linke L schliesslich der rechte Teilbaum R rekursiv durchlaufen post order oder Nebenreihenfolge L R N Zuerst wird der linke L dann der rechte Teilbaum R rekursiv durchlaufen und schliesslich der Knoten N betrachtet in order oder symmetrische Reihenfolge L N R Zuerst wird der linke Teilbaum L rekursiv durchlaufen dann der Knoten N betrachtet und schliesslich der rechte Teilbaum R rekursiv durchlaufen Diese Reihenfolge entspricht bei binaren Suchbaumen der Anordnung der Schlussel und ist fur die meisten Anwendungen die gegebene reverse in order oder anti symmetrische Reihenfolge R N L Zuerst wird der rechte Teilbaum R durchlaufen dann der Knoten N betrachtet und schliesslich der linke Teilbaum L durchlaufen Siehe auch Wirbeltraversierung Rekursive Implementierungen Bearbeiten Die Aktion die an einem Knoten auszufuhren ist geschieht im Unterprogramm callback das vom Benutzer zu liefern ist Eine gewisse Kommunikation mit dem aufrufenden Programm kann bei Bedarf uber die Variable param vorgenommen werden preOrder N callback param Startknoten N Fuhre die gewunschten Aktionen am Knoten aus callback N param if N links null preOrder N links rekursiver Aufruf if N rechts null preOrder N rechts rekursiver Aufruf postOrder N callback param if N links null postOrder N links rekursiver Aufruf if N rechts null postOrder N rechts rekursiver Aufruf Fuhre die gewunschten Aktionen am Knoten aus callback N param inOrder N callback param if N links null inOrder N links rekursiver Aufruf Fuhre die gewunschten Aktionen am Knoten aus callback N param if N rechts null inOrder N rechts rekursiver Aufruf revOrder N callback param if N rechts null revOrder N rechts rekursiver Aufruf Fuhre die gewunschten Aktionen am Knoten aus callback N param if N links null revOrder N links rekursiver Aufruf Eine Traversierung uber den ganzen Baum umfasst pro Knoten genau einen Aufruf einer der rekursiven Traversierungs Funktionen Der Aufwand fur die reine Traversierung bei n displaystyle n nbsp Knoten ist also in 8 n displaystyle Theta n nbsp Iterative Implementierung Bearbeiten Eine iterative Implementierung erlaubt es einen einzelnen Querungs Schritt eine Iteration von einem Knoten zu seinem Nachbarknoten auszufuhren So kann man in gewohnter Manier eine Programmschleife fur ein Intervall mit Anfang und Ende aufsetzen die fraglichen Knoten nacheinander aufsuchen und fur sie die gewunschten Aktionen ausprogrammieren 3 Als Beispiel sei hier nur die in order Traversierung gezeigt die insbesondere bei binaren Suchbaumen eine grosse Rolle spielt da diese Reihenfolge der Sortier Reihenfolge entspricht inOrderNext N richtung Startknoten N richtung 1 Rechts aufwarts in order oder 0 Links abwarts reverse in order Y N kind richtung 1 Schritt in die gegebene Richtung if Y null gegenrichtung 1 richtung spiegele Links lt gt Rechts Abstieg zu den Blattern uber Kinder in der gespiegelten Richtung Z Y kind gegenrichtung while Z null Y Z Z Y kind gegenrichtung return Y Ergebnisknoten Blatt oder Halbblatt Aufstieg zur Wurzel uber die Vorfahren der gegebenen Kindesrichtung Y do Z Y Y Z elter if Y null return null Knoten Z ist die Wurzel d h es gibt kein Element mehr in dieser Richtung until Z Y kind richtung Y ist der erste Vorfahr in der gespiegelten Richtung return Y Ergebnisknoten Eine Traversierung uber den ganzen Baum beinhaltet pro Kante einen Abstieg in der Richtung der Kante und einen Aufstieg in der Gegenrichtung Ein Baum mit n displaystyle n nbsp Knoten hat n 1 displaystyle n 1 nbsp Kanten so dass eine Gesamttraversierung uber 2 n 2 8 n displaystyle 2n 2 in Theta n nbsp Stufen geht Der Aufwand fur eine Einzel Traversierung ist also im Mittel in O 1 displaystyle mathcal O 1 nbsp und im schlechtesten Fall in O h displaystyle mathcal O h nbsp mit h displaystyle h nbsp als der Hohe des Baums Breitensuche Bearbeiten Hauptartikel Breitensuche breadth first oder level order Beginnend bei der Baumwurzel werden die Ebenen von links nach rechts durchlaufen Abstieg zum ersten oder letzten Element BearbeitenGanz ahnlich wie eine iterative Tiefensuche funktioniert die Suche nach dem ersten oder letzten Element firstLast binarBaum richtung richtung Links erstes oder Rechts letztes Y binarBaum wurzel if Y null return null der Baum ist leer Abstieg zu den Halb Blattern do Z Y Y Z kind richtung while Y null return Z Blatt oder Halbblatt Der Aufwand ist O h displaystyle mathcal O h nbsp wo h displaystyle h nbsp die Hohe des Baums ist Einfugen Einfugepunkt BearbeitenEs sei angenommen dass die Navigation zu einem Einfugepunkt bereits erfolgt ist Einfugepunkt bedeutet einen Knoten und eine Richtung rechts bzw links Ein unmittelbarer Einfugepunkt in einem binaren Baum ist immer ein rechtes bzw linkes Halbblatt ein mittelbarer ist der unmittelbare Nachbar in der angegebenen Richtung und spezifiziert zusammen mit der Gegenrichtung dieselbe Stelle im Binarbaum zum echten Einfugen muss aber die Einfugefunktion noch bis zu dem Halbblatt hinabsteigen welches den unmittelbaren Einfugepunkt darstellt Zum Einfugen lasst man das Kind auf der geforderten Richtung des Knotens auf das neue Element verweisen damit ist dieses korrekt eingefugt Die Komplexitat der Einfugeoperation ist somit konstant Nach dem Einfugen ist das neue Element ein Blatt des Binarbaums Im folgenden Beispiel wird ein Knoten mit dem Schlussel J in einen binaren Baum am unmittelbaren Einfugepunkt M links eingefugt der mittelbare ware G rechts S S G W G W gt D M D M B F P B F J P Durch wiederholtes Einfugen an immer derselben Stelle kann es dazu kommen dass der Baum zu einer linearen Liste entartet Loschen BearbeitenBeim Loschen muss man deutlich mehr Falle unterscheiden Wichtig ist z B wie viele Kinder der Knoten hat Fall A Zu loschender Knoten hat hochstens ein Kind Ist der Knoten ein Blatt Knoten ohne Kinder dann wird beim Loschen einfach der Knoten entfernt Hat der zu loschende Knoten genau ein Kind wird dieses an die Stelle des zu loschenden Knotens gesetzt Fall B Zu loschender Knoten hat zwei Kinder In diesem Fall kann die Loschung sowohl uber den linken wie uber den rechten Teilbaum vollzogen werden Um die in order Reihenfolge aufrechtzuerhalten ist aber ein Abstieg bis zu einem Halbblatt unvermeidlich Eine Moglichkeit ist den linken Teilbaum an die Position zu setzen an der der zu loschende Knoten war und den rechten Teilbaum an den linken an dessen rechtester Stelle anzuhangen wie es das Beispiel zeigt G soll geloscht werden S S G W D W gt D M B F B F J P M K J P K Die Veranderungen in den Hohen fallen jedoch kleiner aus wenn der zu loschende Knoten durch einen unmittelbaren Nachbarn in der in order Reihenfolge ersetzt wird 4 Im Beispiel ist F der linke Nachbar von G steht also im linken Teilbaum ganz rechts J ist der rechte Nachbar von G steht also im rechten Teilbaum ganz links Die in order Reihenfolge ist F G J Der linke rechte Nachbar kann einen linken rechten Teilbaum haben der an die Stelle gehangt werden muss wo der Nachbar war Im folgenden Beispiel wird der zu loschende Knoten G durch seinen rechten Nachbarn J ersetzt S S G W J W D M gt D M B F J P B F K P K Um dem Baum moglichst wenig Gelegenheit zu geben einseitig zu werden kann man systematisch zwischen linkem und rechtem Abstieg abwechseln Stehen Balance Werte zur Verfugung liegt es nahe den Abstieg auf der evtl hoheren Seite zu bevorzugen Durch wiederholtes Loschen kann es dazu kommen dass der Baum zu einer linearen Liste entartet Wegen der unvermeidlichen Abstiege bis zu den Halbblattern ist die Komplexitat der Loschoperation im schlechtesten Fall O h displaystyle mathcal O h nbsp wobei h displaystyle h nbsp die Hohe des Baumes ist Da der Abstieg einer Einzel Traversierung entspricht und Abstiege in einer Gesamttraversierung gleich haufig sind wie Aufstiege konvergiert der Mittelwert der abzusteigenden Ebenen fur wachsende Anzahl der Knoten genau gegen 1 Die Abbildungen und der Pseudocode zeigen das Entfernen eines Elements das zwei Kinder und einen nahen Enkel besitzt aus einem binaren Baum nbsp Der Knoten 5 soll geloscht werden nbsp Der neue BaumPseudocoderemove binarBaum knoten Es sei angenommen dass knoten links null knoten rechts null und knoten rechts links null knotenY knoten rechts while knotenY null knotenZ knotenY knotenY knotenZ links knotenZ ist der rechte Nachbar von knoten if knotenZ rechts null knotenZ rechts elter knotenZ elter knotenZ elter links knotenZ rechts knotenZ rechts knoten rechts knoten rechts elter knotenZ knotenZ links knoten links knoten links elter knotenZ knoten links null if knoten elter links knoten knoten elter links knotenZ else knoten elter rechts knotenZ knotenZ elter knoten elter Rotation BearbeitenMit einer Rotation vrashenie russ fur Drehung bei Adelson Velsky und Landis 5 kann man einen Binarbaum in einen anderen uberfuhren und damit Eigenschaften insbesondere Hohen von Teilbaumen beispielsweise in Rot Schwarz Baumen und AVL Baumen oder Suchtiefen von Knoten beispielsweise in Splay Baumen beeinflussen Da bei einer Rotation alle beteiligten Knoten sich nur vertikal bewegen andert sich die in order Reihenfolge nicht so dass der Baum bezuglich dieser Reihenfolge die bei Suchbaumen die Sortierfolge ist aquivalent bleibt Eine Rotation lasst sich durch die Rotationsrichtung Links oder Rechts und durch die Wurzel des betroffenen Teilbaums spezifizieren Statt der beiden kann auch ein Kindknoten angegeben werden der in dieser Verwendung als der Pivot Drehpunkt der Rotation bezeichnet wird Dabei ist die Rotationsrichtung der Kindesrichtung entgegengesetzt Zum Beispiel bewirkt RotateLeft L die Absenkung des Knotens L und die Anhebung seines rechten Kindknotens hier als Pivot R Es handelt sich aber nicht um eine kontinuierliche Drehung eher um eine bistabile Wippe also das Kippen einer Kante hier L R in ihre andere Orientierung L R Die Anforderungen Umkehrung der Orientierung einer gerichteten Kante Bewahrung der in order Reihenfolge kleinstmogliche Veranderung des Baumsziehen gewisse Anpassungen bei den Nachbarknoten nach sich namlich unten das Einhangen des zwischen den beiden Knoten befindlichen Kindes hier m als inneres Kind am unteren Knoten und oben das Ersetzen des bisherigen Kindes beim Gross Elter hier P durch den oberen Knoten 6 nbsp Animierte Rotation in einem Binarbaum P P L RotateLeft L R gt l lt r R RotateRight R L m r l m Erklarung zu RotateLeft L L wird zum linken Kind von R Der ursprunglich linke Kindbaum m von R der Teilbaum in der Mitte wird zum rechten Kindbaum von L Erklarung zu RotateRight R R wird zum rechten Kind von L Der ursprunglich rechte Kindbaum m von L wird zum linken Kindbaum von R Komplexitat Bearbeiten In beiden Fallen andert sich zusatzlich die Aufhangung des neuen Baums von oben her Die Aufhangungen der ausseren Kindbaume l und r bleiben erhalten Somit sind 3 Verknupfungen anzupassen die in den Graphiken verstarkt gezeichnet sind Im Ergebnis benotigt eine Rotation konstante Laufzeit O 1 displaystyle mathcal O 1 nbsp Doppelrotation Bearbeiten Eine Doppelrotation besteht aus zwei unmittelbar hintereinander ausgefuhrten gegenlaufigen Einzel rotationen Dabei wird ein Knoten um zwei Ebenen angehoben Sie wird bspw bei der Rebalancierung von AVL Baumen benotigt Die Anzahl der anzupassenden Verknupfungen ist 5 Beim Spalten eines AVL Baums konnen auch Dreifachrotationen vorkommen Rotationsmetrik Bearbeiten Der Rotationsabstand zwischen 2 Binarbaumen mit derselben Anzahl von Knoten ist die Minimalzahl an Rotationen die erforderlich sind um den ersten Baum in den zweiten zu uberfuhren Mit dieser Metrik wird die Menge B T n displaystyle BT n nbsp der Binarbaume mit n displaystyle n nbsp Knoten zu einem metrischen Raum denn die Metrik erfullt Definitheit Symmetrie und Dreiecksungleichung Der Raum B T n displaystyle BT n nbsp ist ein zusammenhangender metrischer Raum mit einem Durchmesser 2 n 6 displaystyle leq 2n 6 nbsp 7 Das heisst Zu 2 verschiedenen Binarbaumen A displaystyle A nbsp und B B T n displaystyle B in BT n nbsp gibt es eine naturliche Zahl m 2 n 6 displaystyle m leq 2n 6 nbsp und Binarbaume T 1 T m 1 B T n displaystyle T 1 dots T m 1 in BT n nbsp so dass mit T 0 A displaystyle T 0 A nbsp und T m B displaystyle T m B nbsp fur i 1 m displaystyle i 1 dots m nbsp jeweils T i displaystyle T i nbsp aus T i 1 displaystyle T i 1 nbsp durch eine Rotation hervorgeht Es ist ungeklart ob es einen polynomiellen Algorithmus zur Berechnung des Rotationsabstands gibt Umwandeln einer Form eines Binarbaums in eine andere BearbeitenBei den folgenden Umwandlungen wird die in order Reihenfolge nicht geandert Ferner sei n displaystyle n nbsp die Anzahl der Knoten im Baum Ein Binarbaum lasst sich mit Aufwand O n displaystyle mathcal O n nbsp fur Platz und Zeit in eine geordnete Liste umwandeln Da das Eintragen eines einzelnen Eintrags in eine geordnete Liste konstanten Aufwand bedeutet ist angesichts der Komplexitat der Traversierung linearer Aufwand leicht zu schaffen Schwieriger ist es das Eintragen in place zu bewerkstelligen also den Platz fur die Zeiger der Liste vom Platz fur den Binarbaum zu nehmen Eine geordnete Liste lasst sich mit Zeitaufwand O n displaystyle mathcal O n nbsp in einen vollstandig balancierten Binarbaum umwandeln Die Form eines vollstandig balancierten Binarbaums hangt nur von seiner Knotenzahl ab Ist ein Teilbaum mit einer luckenlosen Folge von m displaystyle m nbsp Knoten aufzubauen dann ordnet man dem linken Kindbaum eine luckenlose Folge von m 1 2 displaystyle lceil tfrac m 1 2 rceil nbsp und dem rechten eine von m 1 2 displaystyle lfloor tfrac m 1 2 rfloor nbsp Knoten zu Damit weichen die Abstande zweier beliebiger Blatter von der Wurzel um hochstens 1 voneinander ab wie es sein muss In einem Binarbaum lasst sich mit dem Zeitaufwand O n displaystyle mathcal O n nbsp jeder Knoten mit der Anzahl der Knoten in seinem Teilbaum versehen Bei der Traversierung kann man die Knotenzahlen pro Teilbaum bilden und im Knoten abspeichern Ein AVL Baum lasst sich ohne Anderung seiner Form mit Zeitaufwand O n displaystyle mathcal O n nbsp als Rot Schwarz Baum einfarben Die Menge der AVL Baume ist eine echte Teilmenge in der Menge der Rot Schwarz Baume Der dortige Beweis zeigt nebenbei dass man anhand der Hohen die man beim in order Durchlauf exakt mitschreibt die Rot Schwarz Einfarbung vornehmen kann Siehe auch BearbeitenBinarer Suchbaum H Baum Kartesischer BaumLiteratur BearbeitenDonald Knuth The art of computer programming vol 1 Fundamental Algorithms 3 Auflage Addison Wesley 1997 ISBN 0 201 89683 4 Abschnitt 2 3 S 318 ff Horst Wettstein Systemprogrammierung 2 Auflage Carl Hanser Verlag 1980 ISBN 3 446 13217 1 Lennart Krothaus Der Binarbaum Ein Informatikwunder 3 Auflage MethiVerlag 1998 Robert Sedgewick Kevin Wayne Algorithms Fourth Edition PDF Pearson Education 2011 ISBN 978 0 321 57351 3 Weblinks Bearbeiten nbsp Commons Binarbaume Sammlung von Bildern Videos und Audiodateien Ben Pfaff An Introduction to Binary Search Trees and Balanced Trees PDF 1675 kB 2004 englisch Einzelnachweise Bearbeiten Die Hohe kommt betragsmassig damit auf denselben Wert wie Knuth der neben den Schlussel tragenden Knoten bei ihm innere genannt noch aussere Knoten kennt die als Einfugepunkte aufgefasst werden konnen und die die Hohe der ersten Definition entsprechend um 1 erhohen Die Bezeichnungen finden sich bspw bei Knuth S a Pfaff 2004 p 58 4 9 3 7 Advancing to the Next Node mit einem Stapelspeicher genannt Traverser fur den Ruckweg zur Wurzel Die vorgestellte Losung kommt ohne aus sie setzt stattdessen einen Zeiger elter zum Elterknoten voraus Da zwischen den beiden Knoten kein weiterer Knoten liegen kann wird die in order Reihenfolge nicht verandert Diese Vorgehensweise wurde zum ersten Mal 1962 von T Hibbard vorgeschlagen zitiert nach Sedgewick S 410 G M Adelson Velsky E M Landis Odin algoritm organizacii informacii In Doklady Akademii Nauk SSSR 146 Jahrgang 1962 S 263 266 russisch Die Eindeutigkeit dieser Anpassungen ist nur bei den binaren Baumen gegeben Denn wenn eine Kante L R gekippt wird muss am vorher unteren Knoten R eine Valenz fur das neue Kind L frei gemacht werden Die einzige in der korrekten Richtung ist die Valenz fur m Bei L wird gleichzeitig eine Valenz die vorher auf R zeigte frei die die Richtung von m hat und m ubernehmen muss Ganz ahnlich verhalt es sich am oberen Ende der Kante Daniel D Sleator Robert E Tarjan William P Thurston Rotation distance triangulations and hyperbolic geometry In Journal of the American Mathematical Society 1 3 1988 S 647 681 Normdaten Sachbegriff GND 4145532 0 lobid OGND AKS Abgerufen von https de wikipedia org w index php title Binarbaum amp oldid 234993332