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.

java привіт світ
Видалення в дереві AVL

Обертання R1 (вузол B має коефіцієнт балансу 1)

Обертання R1 має виконуватися, якщо коефіцієнт балансу вузла B дорівнює 1. Під час обертання R1 критичний вузол A переміщується праворуч, маючи піддерева T2 і T3 як лівий і правий дочірні елементи відповідно. T1 слід розмістити як ліве піддерево вузла B.

Процес обертання R1 показано на наступному зображенні.

Видалення в дереві AVL

приклад

Видаліть вузол 55 із дерева AVL, показаного на наступному зображенні.

перемикач java
Видалення в дереві AVL

рішення:

Видалення 55 з дерева AVL порушує фактор балансу вузла 50, тобто вузла A, який стає критичним вузлом. Це умова обертання 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