{=====Программный пример 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;
Так как операция поиска применяется в процедуре вставки элемента в сбалансированное дерево, то нет особого смысла выделять эту операцию в отдельную процедуру. Проще предусмотреть, что при отсутствии элемента производится его включение, а если элемент уже есть - то производятся необходимые действия над элементом.
На первый взгляд работа со сбалансированными бинарными деревьями требует лишних затрат времени на дополнительные операции по поддержанию необходимой структуры дерева и усложнение алгоритмов.
Но на самом деле затраты на балансировку легко компенсируются минимальным временем поиска элементов при вставке, удалении и обработке элементов, по сравнению с другими методами хранения. В то же время четкая структура расположения элементов не усложняет, а наоборот - упрощает алгоритмы работы с такими деревьями.