Курсовая работа: Ссылочные типы. Динамические переменные
{элемент найден, необходимо его удалить}
ServiceVar1:= Tree;
{второй случай процедуры удаления}
if ServiceVar1^.Right= nil then
Tree:= ServiceVar1^.Left
else
if ServiceVar1^.Left= nil then
Tree:= ServiceVar1^.Right
else
{третийслучайпроцедурыудаления}
Del( ServiceVar1^.Left )
end
end;
Вспомогательная рекурсивная процедура Del вызывается лишь в третьем случае процедуры удаления. Она переходит к самому правому элементу левого поддерева удаляемого элемента, а затем заменяет информационное поле удаляемого на значение поля найденного элемента.
4.4 Вывод элементов дерева
Данная задача также может быть решена с помощью механизма рекурсии.
procedure PrintTree( Tree: Pointer);
var
ServiceVar: Assoc1;
begin
ServiceVar:= Tree;
writeln( ServiceVar^.Elem );
if ServiceVar^.Right <> nil then PrintTree(ServiceVar^.Right);
if ServiceVar^.Left <> nil then PrintTree(ServiceVar^.Left);
end;
Разберем решение типичной задачи, связанной с обработкой двоичных деревьев.
Текст задания
Описать процедуру copy( T, T1) которая строит T1 √ копию дерева T.
Решение