Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > Object Pascal: кроссплатформенные технологии > Организация деревьев |
Автор: Kaskad 21.3.2005, 22:34 |
Интересует, как в Паскале реализовать деревья. ![]() ![]() |
Автор: Fedor 21.3.2005, 22:51 |
По-разному можно ![]() Можно с помощью динамических структур данных например. Да или просто с помощью матрицы. Тут многое зависит от того, какие у тебя деревья: если двоичные например, то будет намного легче чем если у вершины может быть много потомков. |
Автор: Zero 22.3.2005, 00:24 | ||||
Это я использовал в своей курсовой работе, по теме "перевод инфиксной записи представленно бинарным деревом, в польскую" |
Автор: Fedor 22.3.2005, 07:29 | ||
Если дерево не двоичное, т.е. может быть больше чем два потомка, то вместо LP и RP нужно использовать массив:
|
Автор: Pakshin A. S. 22.3.2005, 12:40 |
А Parent обязателен? Некоторые задачки этого не требуют... ![]() |
Автор: Kaskad 27.3.2005, 14:22 |
Как задать корень? и как добавлять новые эементы? нужно использовать New( что-то) ? А что именно? И как освобождать память? ![]() |
Автор: Fedor 27.3.2005, 15:48 | ||
Вот, набросал быстро. Работает вроде правильно. С вопросами обращайся ![]()
|
Автор: Kaskad 27.3.2005, 16:44 | ||
У меня бинарные деревья- true|false ![]() Я тоже тут состряпал: ![]()
Добавлено @ 16:47 . и в 62 строке выдаёт ошибку! "Инвалит поинтер оператор" почему??? ![]() |
Автор: Fedor 27.3.2005, 18:40 | ||
Kaskad Ты не обNILяешь потомков вершины при создании таковой. Т.е. везде после new(smth) ты должен инициализировать потомков ее как nil. Например:
Кроме этого момента такое нужно сделать дважды в процедуре Add. Кроме того, непонятен раздел переменных в процедуре Add. Насколько я понимаю, son должна быть глобальной переменной, так что в процедуре Add эту переменную нужно убрать. |
Автор: Kaskad 30.3.2005, 12:11 |
Fedor Спасибо! ![]() Значит дерево я создал. Всё отично работает. Теперь создаю процедуру random_add. То есть, чтоб добавляла листок к дереву случайно. Как это лучше сделать? Приходит на ум, сделать random(1024). Разложить в битовый массив из 10 элементов и спускаться по дереву с поворотами в право-1 и лево-0. Может как-нибудь легче это дело можно организовать? ![]() |
Автор: Kaskad 30.3.2005, 14:12 |
И ещё. У меня такое задание: Определить уровень двоичного дерева, на катором находиться максимальное число вершин. Раз 20 прочитал и ни чего не понял. Всегда будет корень - будет с максимальным количеством вершин. Или я не прав? ![]() |
Автор: Fedor 30.3.2005, 14:33 | ||||
МОжно просто спускаться по дереву и постоянно рендомно генерировать либо 0 либо 1.
На уровне корня (пусть будет нулевой уровень) у тебя только одна вершина: корневая. На первом уровне у тебя потомки корня - их может быть один либо два либо ноль. На втором уровне соотв. от нуля до 2^2 И.т.д. Тебе просто нужно обойти все дерево и считать кол-во вершин на каждом уровне... |