Бинарные деревья |
1. Заголовок или название темы должно быть информативным !
2. Все тексты фрагментов программ должны помещаться в теги [code] ... [/code] или [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ" и используйте ПОИСК !
4. НЕ используйте форум для личного общения!
5. Самое главное - это раздел теоретический, т.е. никаких задач и программ (за исключением небольших фрагментов) - для этого есть отдельный раздел!
Бинарные деревья |
biba |
Сообщение
#1
|
Новичок Группа: Пользователи Сообщений: 19 Пол: Женский Репутация: 0 |
Хотелось бы узнать вот какой момент - каким образом создается бинарное дерево из элементов списка ( список был введен в первой части программы )
|
xds |
Сообщение
#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.
|
Guest |
Сообщение
#3
|
Гость |
xds, Я просто твоя фанатка! =))
|
regromus |
Сообщение
#4
|
Гость |
Перец я не ушел с универа благодаря тебе СПАСИБО!!!!! :flowers:
|
Guest |
Сообщение
#5
|
Гость |
Млин.. ПСИБА!!! :-)
|
Текстовая версия | 11.01.2025 5:18 |