1) Построить дерево из з узлов минимальной высоты, или идеально сбалансированное дерево (количество узлов левого и правого поддеревьев такого дерева должны отличаться не более чем на единицу). Рекурсивный алгоритм построения: 1) первый узел берется в качестве корня дерева; 2) тем же способом строится левое поддерево из nl узлов; 3) тем же способом строится правое поддерево из nr узлов; nr = n – nl – 1 В качестве информационного поля будем брать номера узлов, вводимые с клавиатуры. Рекурсивная функция, реализующая данное построение, будет выглядеть следующим образом: Function Tree(n: Byte): TreeLink; Var t: TreeLink; nl,nr,x: Byte; Begin If n = 0 then Tree:= nil Else Begin nl:= n div 2; nr = n – nl – 1; writeln('Введите номер вершины ); readln(x); new(t); t^. inf:= x; t^. left:= Tree(nl); t^. right:= Tree(nr); Tree:= t; End; {Tree} End. 2) В бинарном упорядоченном дереве найти узел с заданным значением ключевого поля. Если такого элемента в дереве нет, то добавить его в дерево. Procedure Search(x: Byte; var t: TreeLink); Begin If t = nil then Begin New(t); t^inf:= x; t^. left:= nil; t^. right:= nil; End Else if x < t^. inf then Search(x, t^. left) Else if x > t^. inf then Search(x, t^. right) Else Begin {обработка найденного элемента} … End; End.