Курсовая работа: Ссылочные типы. Динамические переменные

else

IncludeInTree2( NewElem, SubTree^.Right )

end;

4.3 Удаление элемента дерева

Проблема реализации данной операции состоит в том, что в общем случае, в удаляемую вершину входит одна связь, а выходят две. Поэтому, необходимо найти подходящий элемент дерева, который можно было бы вставить на место удаляемого. Этот элемент является либо самым правым элементом левого поддерева (для достижения этого элемента необходимо перейти в следующую вершину по левой ветви, а затем, переходить в очередные вершины по правым ветвям до тех пор, пока очередная такая ссылка не будет равна nil), либо самый левый элемент правого поддерева (для достижения этого элемента необходимо перейти в следующую вершину по правой ветви, а затем, переходить в очередные вершины по левым ветвям до тех пор, пока очередная такая ссылка не будет равна nil). Процедура исключения элемента из двоичного дерева должна различать тои случая:

1. элемента с заданной информативной частью в дереве нет; 2. элемент с заданной информативной частью имеет не более одной ветви; 3. элемент с заданной информативной частью имеет две ветви.

procedure DeleteElemOfTree( var Tree: Assoc1; Elem: TypeOfElem1 );

var

ServiceVar1: Assoc1;

procedure Del( var ServiceVar2: Assoc1 );

begin

if ServiceVar2^.Right= nil then begin

ServiceVar1^.Elem:= ServiceVar2^.Elem;

ServiceVar1:= ServiceVar2;

ServiceVar2:=ServiceVar2^.Left

end

else Del( ServiceVar2^.Right )

end;

begin

{удаление элемента с информативным полем равным Elem из дерева Tree}

if Tree= nil then

{первый случай процедуры удаления}

writeln( 'Элемент не найден' )

else

{поиск элемента с заданным ключом}

if Elem < Tree^.Elem then DeleteElemOfTree( Tree^.Left, Elem )

else

if Elem > Tree^.Elem then

DeleteElemOfTree( Tree^.Right, Elem )

К-во Просмотров: 558
Бесплатно скачать Курсовая работа: Ссылочные типы. Динамические переменные