Как можно освободить место занимаемое деревом, Динамич. структуры данных |
Как можно освободить место занимаемое деревом, Динамич. структуры данных |
Scorp_Freeman |
15.12.2007 22:59
Сообщение
#1
|
Пионер Группа: Пользователи Сообщений: 68 Пол: Мужской Реальное имя: Сергей Репутация: 0 |
[b]Добавлено через 11 мин.
ПРОСТИТЕ)) ПОКА РЕДАКТИРОВАЛ ТЕМУ ЗАМЕТИЛ СВОЮ ОШИБКУ ТЕПЕРЬ РАБОТАЕТ. Может кому то пригодиться процедура deleteTree5 которая удаляет узел с ключем равным параметру fio.[/b] Я создал дерево процедурами создание первого узла и добавления нового узла. Каждый узел может иметь максимум два поддерева. Процедуру удаления ветви одноя я нашел реализованную: Код type name=string[20]; TNodeTree=^Node; Node=record FIO:name; Date:TDateTime; Status:name; Left, Right: TNodeTree; end; Код procedure deleteTree5( var q: TNodeTree;x:name); var p: TNodeTree; procedure del(var c: TNodeTree); begin if c^.right <> nil then del(c^.right) else begin p^.FIO:=c^.FIO; p:=c; c:=c^.left; end; end; begin {delete} if q = nil then {writeln(" sym is not in tree") } else if x < q^.fio then deleteTree5( q^.left,x) else if x > q^.fio then deleteTree5( q^.right,x) else begin p:=q; if p^.right = nil then q:=p^.left else if p^.left = nil then q:=p^.right else del(p^.left); dispose(p); end end; Она работает) Я поместил ее в цыкл пока не удалены все узлы: Код while root<>nil do DeleteTree5(root, root.fio); Но программа виснет если дерево содержит больше чем один узыл ( Сообщение отредактировано: Scorp_Freeman - 15.12.2007 23:12 |
Текстовая версия | 27.06.2024 17:19 |