logo

Изтриване в дървото на AVL

Изтриването на възел от AVL дърво е подобно на това в двоично дърво за търсене. Изтриването може да наруши балансиращия фактор на AVL дърво и следователно дървото трябва да бъде балансирано отново, за да се поддържа AVLness. За целта трябва да извършваме ротации. Двата типа ротации са L ротация и R ротация. Тук ще обсъдим R ротации. L завъртания са техните огледални изображения.

Ако възелът, който трябва да бъде изтрит, присъства в лявото поддърво на критичния възел, тогава L ротацията трябва да се приложи иначе, ако възелът, който трябва да бъде изтрит, присъства в дясното поддърво на критичния възел , ще се приложи R ротацията.

Нека приемем, че A е критичният възел, а B е коренният възел на неговото ляво поддърво. Ако възел X, присъстващ в дясното поддърво на A, трябва да бъде изтрит, тогава може да има три различни ситуации:

R0 въртене (възел B има фактор на баланс 0)

Ако възел B има коефициент на баланс 0 и коефициентът на баланс на възел A е нарушен при изтриване на възел X, тогава дървото ще бъде балансирано отново чрез завъртане на дървото с помощта на ротация R0.

Критичният възел A се премества надясно и възелът B става корен на дървото с T1 като ляво поддърво. Поддърветата T2 и T3 се превръщат в ляво и дясно поддърво на възел A. Процесът, включен в ротацията на R0, е показан на следното изображение.

Изтриване в дървото на AVL

Пример:

Изтрийте възела 30 от AVL дървото, показано на следното изображение.

Изтриване в дървото на AVL

Решение

В този случай възелът B има коефициент на баланс 0, следователно дървото ще се завърти с помощта на ротация R0, както е показано на следващото изображение. Възелът B(10) става корен, докато възелът A се премества вдясно. Дясното дете на възел B сега ще стане ляво дете на възел A.

формат на низ
Изтриване в дървото на AVL

R1 Ротация (възел B има фактор на баланс 1)

Завъртането на R1 трябва да се извърши, ако коефициентът на баланс на възел B е 1. При въртенето на R1 критичният възел A се премества вдясно, като поддърветата T2 и T3 са съответно негово ляво и дясно дете. T1 трябва да бъде поставен като ляво поддърво на възел B.

Процесът, включен в въртенето на R1, е показан на следното изображение.

Изтриване в дървото на AVL

Пример

Изтрийте възел 55 от AVL дървото, показано на следното изображение.

char към низ
Изтриване в дървото на AVL

Решение :

Изтриването на 55 от AVL дървото нарушава балансиращия фактор на възел 50, т.е. възел А, който става критичен възел. Това е състоянието на въртене на R1, при което възелът A ще бъде преместен вдясно (показано на изображението по-долу). Дясното на B сега става ляво на A (т.е. 45).

Процесът, включен в решението, е показан на следното изображение.

Изтриване в дървото на AVL

R-1 Ротация (възел B има фактор на баланс -1)

Ротация R-1 трябва да се извърши, ако възелът B има фактор на баланс -1. Този случай се третира по същия начин като LR ротацията. В този случай възелът C, който е десният дъщерен възел на възел B, става кореновият възел на дървото с B и A съответно като ляво и дясно дете.

Поддърветата T1, T2 стават ляво и дясно поддървета на B, докато T3, T4 стават ляво и дясно поддървета на A.

Процесът, включен в въртенето на R-1, е показан на следното изображение.

Изтриване в дървото на AVL

Пример

Изтрийте възела 60 от AVL дървото, показано на следното изображение.

Изтриване в дървото на AVL

Решение:

в този случай възел B има фактор на баланс -1. Изтриването на възела 60 нарушава балансиращия фактор на възела 50, следователно той трябва да бъде завъртян R-1. Възелът C, т.е. 45, става корен на дървото с възел B(40) и A(50) като ляво и дясно дете.

Изтриване в дървото на AVL