русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Удаление узла из дерева


Дата добавления: 2013-12-23; просмотров: 892; Нарушение авторских прав


End.

ReadLn;

End

Begin

Then

End;

Begin

Begin

WriteLn;

WriteLn;

ClrScr;

End;

Begin

Begin

Until (False);

End;

End;

Begin

New(v);

Repeat

New(root);

Begin

End;

Uses WinCRT;

Program Bi_Tree;

Конец поиска

.........

Такого числа нет

Такое число есть

Найдено чисел: 1

Что искать: 50

Что искать: 0

Программа:

Type TRebro = ^TUzel;

TUzel = Record

Data : Integer;

Left, Right : Rebro;

Var root, q, v : TRebro;

poisk: Integer; искомое число

flag: 0..1; флаг поиска

n: Word; количество найденных одинаковых чисел

Procedure Formir_Tree; процедура формирования бинарного дерева

Write('Первое число: ');

ReadLn(root^.Data); первое число - в корень дерева

root^.Left:=Nil;

root^.Right:=Nil;

Write('Очередное число: ');

ReadLn(v^.Data);

If (v^.Data = 0) если очередное число - ноль,

Then Break; то выходим из цикла ввода

v^.Left:=Nil;

v^.Right:=Nil;

q:=Root; поисковик - в корень дерева

While (q <> Nil) Do пока не добрались до листа:

If (v^.Data < q^.Data) если введенное число меньшечисла в очередном узле

Then If (q^.Left <> Nil) и левая ссылка узла не пуста,

Then q:=q^.Left то делаем шаг влево,

Else иначе

Begin если левая ссылка узла пуста,

q^.Left:=v; то подвешиваем туда очередноечисло

Break; и выходим из цикла поиска



If (v^.Data >= q^.Data) если введенное число больше илиравночислу в очередном узле

Then If (q^.Right <> Nil) и правая ссылка узла непуста,

Then q:=q^.Right то делаем шаг вправо,

Else иначе

Begin если правая ссылка узла пуста,

q^.Right:=v; то подвешиваем туда очередное число

Break; и выходим из цикла поиска



End; {While}

End; конец процедуры формирования дерева

Procedure Order(base: TRebro); процедура просмотра дерева

If (base <> Nil) Then

Order(base^.Left);

Write(base^.Data:5);

Order(base^.Right);

End; конецпроцедуры просмотра дерева

Begin основная программа

Formir_Tree; обращение к процедуре формирования дерева

Writeln('Отсортированная последовательность: ');

Order(root); обращение кпроцедуре просмотра дерева

Repeat начало цикла поиска

Write(‘Что искать: ’);

ReadLn(poisk); ввод искомого числа

If (poisk = 0) если ввели 0,

Then Break; то выходим из цикла поиска

q:=root; поисковик – в корень дерева

flag:=0; еще ничего не найдено

n:=0; ни одного значения не найдено

While (q <> Nil) Do пока не добрались до листа:

If (q^.Data = poisk) Then еслизначение найдено:

flag:=1;

n:=n+1; количество найденных одинаковых значений

If (poisk < q^.Data) спускаемся на следующий узел

Then q:=q^.Left

Else q:=q^.Right;

End; {While} дошли до листа

If (flag = 1)

WriteLn(‘Такое число есть’);

WriteLn(‘Найдено чисел: ’, n);

Else WriteLn(‘Такого числа нет’);

Until (False); конец цикла поиска

Задача удаления узла в сформированном дереве решается в следующем порядке:

1. поиск удаляемого узла

2. анализ найденного узла

Поиск удаляемого узла осуществим с помощью двух переменных-указателей: q – поискового, указывающего на найденный узел, и v, отстающего от него на уровень и всегда указывающего на корень удаляемого узла:

Var root, q, v, r : TRebro;

poisk: Integer; искомое число (узел)

flag: 0..1; флаг поиска: 1 – узел найден, 0 – не найден

Методика удаления узла будет зависеть от того, какого типа этот узел:

a. лист

b. узел с одним поддеревом,

c. узел с двумя поддеревьями.

Добавим в нашу программу процедуру удаления заданного узла. Сначала найдем заданный узел - на него будет указывать ссылка q:

Write(‘Что удалить: ’);

ReadLn(poisk); ввод удаляемого узла

If (poisk = 0) если это 0,

Then Break; то выходим из циклаудаления

q := root; поисковик q – в корень дерева

v := q; v отстает на шаг

flag := 0; еще ничего не найдено

While (q <> nil) Do пока не дошли до листа:



<== предыдущая лекция | следующая лекция ==>
Поиск заданного узла в дереве | Объектно-ориентированное программирование


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 0.004 сек.