|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
04.07.2014, 02:49 | #1 |
Старожил
Регистрация: 30.12.2009
Сообщений: 11,430
|
Обход дерева неизвестной глубины
Всем привет!
Есть некое бездонное нечто: Код:
У объекта есть переключатель, переменная Container которая являт собой признак способности этого объекта содержать в себе другие объекты. Если True, TTreeItem имеет право хранить другие TTreItem. Задача: Мне нужно рекурсивно обойти это дерево и найти что-то, когда что-то найдено, вернуть это в переменную и прекратить поиск. Для этого написал функцию FindByID: Код:
Проверяем себя, Если контеинер, то цикл по внутренним элементам. Если нашли элемент, то возврат его в переменную, и выход из функции. Проблема в том, что код работает. И под отладчиком я точно прихожу к моменту когда функция дает результат(возврат совпадения в переменную и выход), однако затем, на следующие X нажатий F8, отладчик скачет по предпоследнему end; и затем передает управление программе. В итоге алгоритм отработал вроде бы верно, но функция вернула False, и нужный код не отработал. В чем ошибка? Может есть более эффективный метод поиска в таких деревьях? Последний раз редактировалось Человек_Борща; 04.07.2014 в 02:51. |
04.07.2014, 03:03 | #2 |
МегаМодератор
СуперМодератор
Регистрация: 09.11.2010
Сообщений: 7,323
|
А так?
Код:
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
Последний раз редактировалось BDA; 04.07.2014 в 03:06. |
04.07.2014, 03:32 | #3 |
Старожил
Регистрация: 30.12.2009
Сообщений: 11,430
|
Работает. Чудно однако... из-за одного Break'а
|
04.07.2014, 06:16 | #4 |
Старожил
Регистрация: 04.02.2009
Сообщений: 17,351
|
Мне тоже Break не понравился....
Маньяк-самоучка
Utkin появился в результате деления на нуль. Осторожно! Альтернативная логика |
04.07.2014, 16:07 | #5 |
Ваш К. О.
Участник клуба
Регистрация: 26.12.2012
Сообщений: 1,799
|
Угу, низ я бы записал так:
Код:
|
04.07.2014, 16:10 | #6 |
Старожил
Регистрация: 30.12.2009
Сообщений: 11,430
|
Так оно с Break'ом не работает с Exit - все отлично.
|
04.07.2014, 16:21 | #7 |
Старожил
Регистрация: 17.11.2010
Сообщений: 18,922
|
А здесь без разницы. В исходном коде не работало потому, что Result забыли присвоить
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Чтение дерева неизвесной глубины из БД | Человек_Борща | БД в Delphi | 4 | 03.06.2014 07:16 |
обход прошитого дерева | fergus2010 | Общие вопросы Delphi | 6 | 23.01.2014 23:00 |
Обход дерева | mohita | C# (си шарп) | 1 | 11.12.2011 19:48 |
Обход двоичного дерева | F1nk | Помощь студентам | 0 | 03.06.2010 17:51 |
обход дерева | ribka | Помощь студентам | 2 | 11.12.2007 20:38 |