logo

Ištrynimas AVL medyje

Mazgo ištrynimas iš AVL medžio yra panašus į dvejetainio paieškos medžio pašalinimą. Ištrynimas gali sutrikdyti AVL medžio balanso koeficientą, todėl norint išlaikyti AVL lygį, medį reikia iš naujo subalansuoti. Šiuo tikslu turime atlikti sukimus. Dviejų tipų sukimas yra L sukimasis ir R pasukimas. Čia aptarsime R sukimus. L sukimai yra veidrodiniai jų vaizdai.

Jei mazgas, kurį reikia ištrinti, yra kairiajame kritinio mazgo antriniame medyje, tada L sukimas turi būti taikomas kitu atveju, jei mazgas, kurį reikia ištrinti, yra kritinio mazgo dešiniajame antriniame medyje. , bus taikomas R pasukimas.

Apsvarstykime, kad A yra kritinis mazgas, o B yra jo kairiojo pomedžio šakninis mazgas. Jei mazgas X, esantis dešiniajame A antriniame medyje, turi būti ištrintas, gali būti trys skirtingos situacijos:

R0 sukimasis (mazgas B turi balanso koeficientą 0)

Jei mazgo B balanso koeficientas yra 0, o mazgo A balanso koeficientas sutrinka ištrynus mazgą X, tada medis bus subalansuotas sukant medį naudojant R0 sukimą.

Kritinis mazgas A perkeliamas į dešinę, o mazgas B tampa medžio šaknimis, o T1 yra kairysis pomedis. Medžiai T2 ir T3 tampa kairiuoju ir dešiniuoju mazgo A pomedžiu. R0 sukimosi procesas parodytas sekančiame paveikslėlyje.

Ištrynimas AVL medyje

Pavyzdys:

Ištrinkite 30 mazgą iš AVL medžio, parodyto kitame paveikslėlyje.

Ištrynimas AVL medyje

Sprendimas

Šiuo atveju mazgas B turi balanso koeficientą 0, todėl medis bus pasuktas naudojant R0 pasukimą, kaip parodyta kitame paveikslėlyje. Mazgas B(10) tampa šaknimis, o mazgas A perkeliamas į dešinę. Dešinysis mazgo B vaikas dabar taps kairiuoju mazgo A vaikas.

bash suskaidyta eilutė pagal skyriklį
Ištrynimas AVL medyje

R1 sukimasis (mazgas B turi balanso koeficientą 1)

R1 Rotacija turi būti atliekama, jei mazgo B balanso koeficientas yra 1. Sukant R1, kritinis mazgas A perkeliamas į dešinę, o pomedžiai T2 ir T3 yra atitinkamai kairysis ir dešinysis antrinis. T1 turi būti dedamas kaip kairysis mazgo B pomedis.

Procesas, susijęs su R1 sukimu, parodytas kitame paveikslėlyje.

Ištrynimas AVL medyje

Pavyzdys

Ištrinkite 55 mazgą iš AVL medžio, parodyto kitame paveikslėlyje.

alfa beta genėjimas
Ištrynimas AVL medyje

Sprendimas:

Ištrynus 55 iš AVL medžio, pažeidžiamas mazgo 50 balanso koeficientas, ty mazgo A, kuris tampa kritiniu mazgu. Tai R1 sukimosi sąlyga, kai mazgas A bus perkeltas į dešinę (parodyta paveikslėlyje žemiau). B dešinė dabar tapo A kairiąja (ty 45).

Procesas, susijęs su sprendimu, parodytas toliau pateiktame paveikslėlyje.

Ištrynimas AVL medyje

R-1 sukimasis (mazgas B turi balanso koeficientą -1)

R-1 sukimas turi būti atliekamas, jei mazgas B turi balanso koeficientą -1. Šis atvejis traktuojamas taip pat, kaip ir LR sukimas. Šiuo atveju mazgas C, kuris yra dešinysis mazgo B vaikas, tampa šakniniu medžio mazgu, o B ir A atitinkamai yra kairioji ir dešinioji.

Medžiai T1, T2 tampa kairiuoju ir dešiniuoju B pomedžiu, o T3, T4 tampa kairiuoju ir dešiniuoju A medžiu.

Procesas, susijęs su R-1 sukimu, parodytas kitame paveikslėlyje.

Ištrynimas AVL medyje

Pavyzdys

Ištrinkite mazgą 60 iš AVL medžio, parodyto kitame paveikslėlyje.

Ištrynimas AVL medyje

Sprendimas:

šiuo atveju mazgas B turi balanso koeficientą -1. Ištrynus mazgą 60, sutrinka mazgo 50 balanso koeficientas, todėl jį reikia pasukti R-1. Mazgas C, ty 45, tampa medžio šaknimi, o mazgas B(40) ir A(50) yra jo kairysis ir dešinysis vaikas.

Ištrynimas AVL medyje