![]() |
Прежде чем задать вопрос, смотрите FAQ.
Рекомендуем загрузить DRKB.
![]() |
Searcher |
![]()
Сообщение
#1
|
Новичок ![]() Группа: Пользователи Сообщений: 24 Пол: Мужской Репутация: ![]() ![]() ![]() |
Условие:Дано произвольное дерево, в узлах которого запись из двух целых чисел. Создать новое
дерево, в узлах которого будет запись, состоящая из меньшего из двух чисел и его номера (1 или 2). Решить нерекурсивно (через стек или очередь). Вот я кое-что сделал, но что-то не получается с процедурой копирования. Помогите, пожалуйста, разобраться. ![]() Сообщение отредактировано: Searcher - 21.01.2009 14:17 |
![]() ![]() |
volvo |
![]()
Сообщение
#2
|
Гость ![]() |
Поменяй свою реализацию CopyO вот на эту:
procedure TTree.CopyO(var T:TTree);Понимаешь, что делается? Берешь из начала очереди элемент, и ставишь в конец очереди всех его потомков. Таким образом без рекурсии обрабатывается всё дерево. |
Searcher |
![]()
Сообщение
#3
|
Новичок ![]() Группа: Пользователи Сообщений: 24 Пол: Мужской Репутация: ![]() ![]() ![]() |
]Понимаешь, что делается? Берешь из начала очереди элемент, и ставишь в конец очереди всех его потомков. Таким образом без рекурсии обрабатывается всё дерево. Ваша реализация работает несовсем как надо. Нужно чтобы ветвление полностью сохранялось как в исходном, а значения узлов менялись. В вашей реализации ветвление меняется. Сообщение отредактировано: Searcher - 21.01.2009 16:06 |
volvo |
![]()
Сообщение
#4
|
Гость ![]() |
Так...
0) реализация очереди никуда не годится. Она у тебя глючит по-страшному. Я сделал так: type 1) само заполнение дерева из строки можно сделать гораздо красивее: procedure TForm1.Button2Click(Sender: TObject);Чувствуешь разницу? 2) немного поправим вывод дерева: procedure TTree.Output(atw:TTreeView); 3) и, собственно, основное, что ты спрашивал: procedure TTree.CopyO(var T:TTree);(можно подсократить за счет добавления пары вложенных процедур, но я не думаю, что это облегчит понимание. Кроме того, надо не забывать освобождать очередь qpr, она не будет пустой после выполнения метода CopyO, добавь деструктор класса TQueue лучше всего). Проверялось на строке 1 2 6 5 9 3 2 19 4 2 29 4 53 6 4 5 11 4 13 9 расхождений в ветвлениях не обнаружено. Тестируй... |
Searcher |
![]()
Сообщение
#5
|
Новичок ![]() Группа: Пользователи Сообщений: 24 Пол: Мужской Репутация: ![]() ![]() ![]() |
Большое спасибо. Разобрался.
|
![]() ![]() |
![]() |
Текстовая версия | 10.07.2025 20:42 |