ТЕКСТ ПРОЦЕДУРЫ Search.

{=====Программный пример 6.21 ===========}

Procedure Search (x:integer; var p:ref);

begin

if x > p^.key then

if p=nil then writeln('Элемент на найден')

else Search(x,p^.right);

if x < p^.key then

if p=nil then writeln('Элемент на найден')

else Search(x,p^.left);

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

{ Здесь - процедура обработки элемента }

end;

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

На первый взгляд работа со сбалансированными бинарными деревьями требует лишних затрат времени на дополнительные операции по поддержанию необходимой структуры дерева и усложнение алгоритмов.

Но на самом деле затраты на балансировку легко компенсируются минимальным временем поиска элементов при вставке, удалении и обработке элементов, по сравнению с другими методами хранения. В то же время четкая структура расположения элементов не усложняет, а наоборот - упрощает алгоритмы работы с такими деревьями.