В дальнейшем самостоятельно дописать процедуры вывода дерева и включение в дерево
Program poisk; Uses crt; Type pnode=^node; node =record data: integer; {ключ} Left: pnode;{указатель на левое поддерево} right: pnode; {указатель на правое поддерево} End; Var root: pnode; Key: pnode; Option:integer; Пример функции поиска по дереву function find(root: pnode; key:integer; var p, parent: pnode):Boolean; begin p:=root; while p<>nil do begin if key=p^. data then begin{ узел с таким ключом есть } find:=true; exit; end; parent:=p {запомнить указатель на предка} if key<p^. data then p:= p ^. left {спуститься влево} else p:= p ^. right; {спуститься вправо} end; find:=false; end; {далее надо написать процедуры самостоятельно} Процедура удаления и основная часть программы ниже procedure print_tree( p: pnode; level:integer);{вывода} var i:integer; ...... End; procedure insert(var root: pnode; key:integer);{включение в дерево} var p, parent: pnode; ...... End; 2. Мы рассмотрели несколько способов обхода дерева. Наибольший интерес для двоичного дерева поиска представляет симметричный обход, т.к. он дает нам упорядоченную последовательность ключей. Логично реализовать обход дерева в виде рекурсивной процедуры. Пример обхода дерева с помощью рекурсии Procedure obhod(p: pnode); Begin if p<>nil then begin obhod(p^.left); writeln(p^.inf); obhod(p^.right); end; end;
|