IPB
ЛогинПароль:

> Правила раздела!

1. Заголовок или название темы должно быть информативным !
2. Все тексты фрагментов программ должны помещаться в теги [code] ... [/code] или [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ" и используйте ПОИСК !
4. НЕ используйте форум для личного общения!
5. Самое главное - это раздел теоретический, т.е. никаких задач и программ (за исключением небольших фрагментов) - для этого есть отдельный раздел!

 
 Ответить  Открыть новую тему 
> Бинарные деревья
сообщение
Сообщение #1


Новичок
*

Группа: Пользователи
Сообщений: 19
Пол: Женский

Репутация: -  0  +


Хотелось бы узнать вот какой момент - каким образом создается бинарное дерево из элементов списка ( список был введен в первой части программы ) blink.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


N337
****

Группа: Пользователи
Сообщений: 737
Пол: Мужской

Репутация: -  26  +


Вот алгоритм добавлениея элемента в двоичное дерево:
Если дерево пусто, то просто сделаем новый элемент корнем. В противном случае сравним новый элемент со значением, хранящимся в корне - если меньше, то повторим все манипуляции для левого поддерева, иначе - для правого.

Подозреваю, что код более информативен, чем сонная белиберда, написанная выше...: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.



--------------------
The idiots are winning.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Гость






xds, Я просто твоя фанатка! =))
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Гость






Перец я не ушел с универа благодаря тебе СПАСИБО!!!!! :flowers:
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Гость






Млин.. ПСИБА!!! :-)
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 11.01.2025 5:18
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name