![]() |
![]() ![]() |
![]() |
Scorp_Freeman |
![]()
Сообщение
#1
|
![]() Пионер ![]() ![]() Группа: Пользователи Сообщений: 68 Пол: Мужской Реальное имя: Сергей Репутация: ![]() ![]() ![]() |
[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 |
![]() ![]() |
![]() |
Текстовая версия | 28.06.2024 23:40 |