logo

Löschung im AVL-Baum

Das Löschen eines Knotens aus einem AVL-Baum ähnelt dem in einem binären Suchbaum. Das Löschen kann den Gleichgewichtsfaktor eines AVL-Baums stören und daher muss der Baum neu ausgeglichen werden, um die AVL-Qualität aufrechtzuerhalten. Zu diesem Zweck müssen wir Rotationen durchführen. Die beiden Rotationsarten sind L-Rotation und R-Rotation. Hier werden wir R-Rotationen diskutieren. L-Rotationen sind die Spiegelbilder davon.

Wenn der zu löschende Knoten im linken Teilbaum des kritischen Knotens vorhanden ist, muss die L-Rotation angewendet werden, andernfalls befindet sich der zu löschende Knoten im rechten Teilbaum des kritischen Knotens , wird die R-Rotation angewendet.

Nehmen wir an, dass A der kritische Knoten und B der Wurzelknoten seines linken Unterbaums ist. Soll der Knoten X, der im rechten Teilbaum von A vorhanden ist, gelöscht werden, kann es drei verschiedene Situationen geben:

R0-Rotation (Knoten B hat Ausgleichsfaktor 0)

Wenn der Knoten B einen Ausgleichsfaktor von 0 hat und der Ausgleichsfaktor von Knoten A durch das Löschen des Knotens X gestört wird, wird der Baum durch Drehen des Baums mithilfe der R0-Rotation neu ausgeglichen.

Der kritische Knoten A wird nach rechts verschoben und der Knoten B wird zur Wurzel des Baums mit T1 als linkem Unterbaum. Die Teilbäume T2 und T3 werden zum linken und rechten Teilbaum des Knotens A. Der an der R0-Rotation beteiligte Prozess ist in der folgenden Abbildung dargestellt.

Löschung im AVL-Baum

Beispiel:

Löschen Sie den Knoten 30 aus dem im folgenden Bild gezeigten AVL-Baum.

Löschung im AVL-Baum

Lösung

In diesem Fall hat der Knoten B den Ausgleichsfaktor 0, daher wird der Baum mithilfe der R0-Rotation gedreht, wie in der folgenden Abbildung dargestellt. Der Knoten B(10) wird zur Wurzel, während der Knoten A nach rechts verschoben wird. Das rechte Kind von Knoten B wird nun zum linken Kind von Knoten A.

Java liest die Datei Zeile für Zeile
Löschung im AVL-Baum

R1 Rotation (Knoten B hat Balancefaktor 1)

Die R1-Rotation muss durchgeführt werden, wenn der Ausgleichsfaktor von Knoten B 1 ist. Bei der R1-Rotation wird der kritische Knoten A nach rechts verschoben, wobei die Unterbäume T2 und T3 ihr linkes bzw. rechtes Kind sind. T1 soll als linker Teilbaum des Knotens B platziert werden.

Der Prozess der R1-Rotation ist im folgenden Bild dargestellt.

Löschung im AVL-Baum

Beispiel

Löschen Sie Knoten 55 aus dem im folgenden Bild gezeigten AVL-Baum.

Löschung im AVL-Baum

Lösung :

Das Löschen von 55 aus dem AVL-Baum stört den Gleichgewichtsfaktor des Knotens 50, d. h. Knoten A, der zum kritischen Knoten wird. Dies ist der Zustand der R1-Rotation, bei dem der Knoten A nach rechts verschoben wird (siehe Abbildung unten). Die rechte Seite von B ist nun die linke Seite von A (d. h. 45).

Der an der Lösung beteiligte Prozess ist in der folgenden Abbildung dargestellt.

string.replaceall in Java
Löschung im AVL-Baum

R-1-Rotation (Knoten B hat Ausgleichsfaktor -1)

Die R-1-Rotation muss durchgeführt werden, wenn der Knoten B den Ausgleichsfaktor -1 hat. Dieser Fall wird wie die LR-Rotation behandelt. In diesem Fall wird der Knoten C, der das rechte Kind von Knoten B ist, zum Wurzelknoten des Baums mit B und A als seinen linken bzw. rechten Kindern.

Die Teilbäume T1, T2 werden zu den linken und rechten Teilbäumen von B, während T3, T4 zu den linken und rechten Teilbäumen von A werden.

Der Prozess der R-1-Rotation ist im folgenden Bild dargestellt.

Löschung im AVL-Baum

Beispiel

Löschen Sie den Knoten 60 aus dem im folgenden Bild gezeigten AVL-Baum.

Löschung im AVL-Baum

Lösung:

In diesem Fall hat Knoten B den Ausgleichsfaktor -1. Das Löschen des Knotens 60 stört den Gleichgewichtsfaktor des Knotens 50, daher muss er um R-1 gedreht werden. Der Knoten C, d. h. 45, wird zur Wurzel des Baums mit dem Knoten B(40) und A(50) als seinem linken und rechten Kind.

Löschung im AVL-Baum