Помощь - Поиск - Пользователи - Календарь
Полная версия: Бинарные деревья
Форум «Всё о Паскале» > Pascal, Object Pascal > Теоретические вопросы
biba
Хотелось бы узнать вот какой момент - каким образом создается бинарное дерево из элементов списка ( список был введен в первой части программы ) blink.gif
xds
Вот алгоритм добавлениея элемента в двоичное дерево:
Если дерево пусто, то просто сделаем новый элемент корнем. В противном случае сравним новый элемент со значением, хранящимся в корне - если меньше, то повторим все манипуляции для левого поддерева, иначе - для правого.

Подозреваю, что код более информативен, чем сонная белиберда, написанная выше...:P

Код

program Tree;

{ Елемент списка/узел двоичного дерева }
type
 PNode = ^TNode;
 TNode = record
   Value: Integer;
   Left, Right: PNode;
 end;

{ Добавление элемента в двоичное дерево }
procedure InsertNode(var Root, Node: TNode);
begin
 if Node.Value < Root.Value then
   if Root.Left = nil then
     Root.Left := @Node
   else
     InsertNode(Root.Left^, Node)
 else
   if Root.Right = nil then
     Root.Right := @Node
   else
     InsertNode(Root.Right^, Node);
end;

{ Обход двоичного дерева в глубину с выводом значений узлов }
procedure TreeWalk(const Root: PNode);
begin
 if Root = nil then Exit;
 TreeWalk(Root^.Left);
 Write(' ', Root^.Value);
 TreeWalk(Root^.Right);
end;

const
 MaxSize = 1000;

var
 List: array[0..MaxSize - 1] of TNode;
 i, n: Integer;
 f: Text;

begin
 { Ввод списка из файла }
 Assign(f, 'list.txt');
 Reset(f);
 Read(f, n); { первое число - количество элементов }
 for i := 0 to n - 1 do Read(f, List[i].Value);
 Close(f);

 { Исключение случай пустого списка/дерева }
 if n = 0 then Exit;

 { Построение дерева }
 for i := 1 to n - 1 do
   begin
     List[i].Left := nil;
     List[i].Right := nil;
     InsertNode(List[0], List[i]);
   end;

 { Обход в глубину и вывод }
 TreeWalk(@List);

 Writeln;
end.

Guest
xds, Я просто твоя фанатка! =))
regromus
Перец я не ушел с универа благодаря тебе СПАСИБО!!!!! :flowers:
Guest
Млин.. ПСИБА!!! :-)
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.