UNIT TREE; INTERFACE type TElem = record { Тип информационной части } Number: integer; { Число } Count : integer { Количество повторений } end; TTree = ^Tnode; { Представление дерева } TNode = record { Узел дерева } Info : TElem; { Инфориационная часть } Left : TTree; { Указатель на левое поддерево } Right: Ttree { Указатель на правое поддерево } end; procedure Add( var Tree: TTree; i: integer ); procedure Print(Tree:TTree); procedure Delete(Tree:TTree ); IMPLEMENTATION { Процедура добавляет в дерево двоичного поиска } { новый элеиент i. Если элеиент i в дереве уже } { присутствует, увеличивается счетчик числа } { вхождений элеиента i в соответствующей узле дерева } procedure Add( var Tree: TTree; i: integer ); begin If Tree <> nil then with Tree^ do begin If Info.Number < i then Add(Right,i) else If Info.Number > i then Add(Left,i) else { элеиент 1 в дереве } { присутствует, увеличивает } { счетчик числа вхождений } { элемента } Info.Count:=Info.Count+1 end else begin { Добавляеи новый узел } new(Tree); with Tree^ do begin Info.Number:=i; Info.Count:=1; Left:=nil; Right:=nil end end end; { Процедура печати элеиентов дерева } { в порядке убывания значений } procedure Print(Tree:TTree); begin if Tree <> nil then with Tree^ do begin { обходик дерево справа налево } Print(Right); write(Info.Number,'(',Info.Count, 'р) '); Print(Left) end end; { Процедура удаления дерева. После выхода } { из процедуры значение Tree не определено } procedure Delete(Tree:TTree ); begin If Tree <> nil then Begin { удаляем правое поддерево } Delete(Tree^.Right ); { удаляем левое поддерево } Delete(Tree^.Left ); { удаляем корень } dispose(Tree) end end; End.