Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

Алгоритм процедуры Delete



Дано: сбалансированное бинарное дерево с корнем ROOT. Поля: LPTR, RPTR, KEY (ключ), BAL (показатель сбалансированности), DATA (информация).

Задан: ключ - х, информация - INF.

Алгоритм находит удаляемый элемент и вызывает процедуры удаления и последующей балансировки бинарного дерева. Если элемент отсутствует в дереве, выдается соответствующее сообщение.

Переменная h используется как флаг, указывающий на то, что было произведено удаление элемента. P - текущий указатель при перемещении по дереву, q - вспомогательный указатель.

_Начало. Delete

1. Поиск удаляемого элемента

_Если. x < KEY(p)

_то.: p=LPTR(p);

Вызов Delete;

_если. h=true _то. Вызов Balance_L;

перейти к п.5

_Если. x > KEY(p)

_то.: p=RPTR(p);

Вызов Delete;

_если. h=true _то. вызов Balance_R;

перейти к п.5

_Если. p=nil

_то.: напечатать "Ключа в дереве нет!";

_конец.;

2. Удаление элемента: (если все предыдущие

условия не выполнены, то указатель указывает на

элемент, подлежащий удалению).

Удаляется элемент с одним поддеревом.

q=p; { вводим вспомогательный указатель }

_если. RPTR(q)=nil

_то.: p=LPTR(q);

h=true;

перейти к п.4;

_если. LPTR(q)=nil

_то.: p=RPTR(q);

h=true;

перейти к п.4;

3. Удаление элемента с двумя поддеревьями:

q=LPTR(q);

_если. h=true _то.: вызов Balance_L;

перейти к п.4

4. Напечатать "Узел удален из дерева".

5. Выход.

_Конец. Delete;

ОПИСАНИЕ РАБОТЫ АЛГОРИТМА:

· П.1 - осуществляет поиск удаляемого элемента с помощью рекурсивных вызовов процедуры Delete (т.е. - самой себя). При этом в стеке сохраняется весь путь поиска. Если было произведено удаление элемента, то производится вызов соответствующей процедуры балансировки. Если элемент с заданным ключом не найден, то выводится соответствующее сообщение.

· П.2 - производится удаление элемента с одной ветвью простым переносом указателя. Устанавливается флаг удаления элемента.

· П.3 - производится вызов процедуры Del, производящей удаление элемента с двумя поддеревьями.

· П.5 - т.к. эта процедура рекурсивная, то производится возврат в место предыдущего вызова, либо в главную программу.





Дата публикования: 2014-11-04; Прочитано: 265 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.006 с)...