![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Удаление ветки с дочерними элементами TTreeView [D5, WinXP]
TechnoDreamer © (2004-11-22 02:22:00)Надо функция удаляющая TTreeNode со всеми дочерними элементами. Причем она должна быть не рекурсивной и удалять каждый элемент по одному (потому что вместе с элементом надо удалять и связанные с ним данные). Поможет кто-нибуть с этим?
jack128 (2004-11-22 03:52:00) [1]Вообще лудше почитать теорию на этот счет, а вот вот что надумал.
Алгоритм беру из головы, ни разу на практике не применял, но идею, думаю, подскажет..
label lb1, lb2;
begin
//Заводишь стек для всех переменных, используемых в процедуре.
lb1:
//выполняешь код, до рекурсивного вызова.
// вместо рекурсивного вызова делаешь:
// кладешь все переменные в стек
// и подменяешь входные параметры на новые
// goto lb1;
lb2:
//...
//вместо завершения процедуры
if not стек_переменных_пустой then
begin
//извлекаешь переменные из стека
goto lb2;
end;
end;
Но лудше по подробнее задачу опиши.. Может удастся оптимизировать так, что и рекурсия прокатит.
зы: а с чего ты вообще решил, что проблема именно в рекурсии???
TechnoDreamer (2004-11-22 02:36:00) [2]Знаю, что сложнее, потому и спрашиваю, рекурсивная есть. Работает с ошибками (идет работа с базой данных через ADO) и медленно. Т.е. на небольших ветках всё нормально, а с большими пробела, и именно с базой, при чём ошибка именно ADO.
jack128 (2004-11-22 02:30:00) [3]TechnoDreamer © (22.11.04 2:22)
Причем она должна быть не рекурсивной
Чем вызвано это ограничение ? В принципе рекурсию можно развернуть, но в плане кодирования это на порядок сложнее.