Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Шпоры к экзамену по программированию в 1 семест....doc
Скачиваний:
26
Добавлен:
22.04.2019
Размер:
576 Кб
Скачать

79.Удаление элемента из бпд.

Удаление узла (REMOVE)

Дано: дерево Т с корнем n и ключом K.

Задача: удалить из дерева Т узел с ключом K (если такой есть).

Алгоритм:Если дерево T пусто, остановиться;

Иначе сравнить K с ключом X корневого узла n.

Если K>X, рекурсивно удалить K из правого поддерева Т;

Если K<X, рекурсивно удалить K из левого поддерева Т;

Если K=X, то необходимо рассмотреть три случая.

Если обоих детей нет, то удаляем текущий узел и обнуляем ссылку на него у родительского узла;Если одного из детей нет, то значения полей ребёнка m ставим вместо соответствующих значений корневого узла, затирая его старые значения, и освобождаем память, занимаемую узлом m;Если оба ребёнка присутствуют, то

найдём узел m, являющийся самым левым узлом правого поддерева с корневым узлом Right(n);скопируем данные (кроме ссылок на дочерние элементы) из m в n;

рекурсивно удалим узел m.

80. Реализация бпд с использованием динамической памяти.

Наиболее удобной реализацией БПД представляется задание каждой его вершины в динамической памяти. В статическую область помещается лишь указатель на корень дерева: struct TreeItem{ int Info; TreeItem* Father;

TreeItem* LSon; TreeItem* RSon; TreeItem(){LSon=RSon=NULL;}

};

 TreeItem* Root = NULL;

// пустое дерево