![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Деревья и рекурсия [D7]
ydv © (2004-07-12 11:37:00)Есть такая задачка.
Дана таблица вида:
codeup name codethis
0 | Авто | 10
0 | Мото | 20
10 | Жигули | 40
20 | Ява | 50
40 | модель 2106| 60
50 | модель 350 | 70
40 | модель 2109| 80
в результате некоторой обработки получается дерево вида:
-Авто
-Жигули
-модель 2106
-модель 2109
-Мото
-Ява
-модель 350
Стоит задача выбрать все элементы, относящиеся, например, к ветке Авто. Понимаю, что надо применять рекурсию. А вот как - не знаю.
Sheng (2004-07-12 13:34:00) [1]Да, и ещё в условии надо поставить проверку, если элемент не выделен.
ydv (2004-07-12 13:09:00) [2]Ок. Попробую.
Sheng (2004-07-12 12:45:00) [3]codeup name codethis selected
0 | Авто | 10 | no
0 | Мото | 20 | no
10 | Жигули | 40 | no
20 | Ява | 50 | no
40 | модель 2106| 60 | no
50 | модель 350 | 70 | no
40 | модель 2109| 80 | no
procedure Sel(Num: Integer);
var
i: Integer;
begin
for i:=1 to Length(Массив) do
if Массив[1,i]=Num then // проверяем принадлежность
begin
Массив[4,i]:=True; // помечаем как выбранный
Sel(Массив[3,i]); // вызываем со сл. типом
end;
end;
вызов: Sel(10);
теоретически, должно работать
MBo (2004-07-12 12:34:00) [4]>Дело в том, что это не VCL-дерево (TTreeView), а просто таблица
Ничего в принципе не изменится - вместо типа TTreeItem твой будет, а детишки у тебя - раз имеется дерево - значит, как-то организованы.
ydv (2004-07-12 12:33:00) [5]а никаким, просто есть таблица и всё, которую можно в виде дерева представить, а можно и не представлять. Главная задача - выбирать все подчиненные элементы до самого последненго уровня и заполнять другую таблицу.
Sheng (2004-07-12 12:25:00) [6]Напиши, каким образом представлены данные после обработки (пример кода - описание массива)
ydv (2004-07-12 12:22:00) [7]Дело в том, что это не VCL-дерево (TTreeView), а просто таблица, которую можно представить в виде дерева для наглядности.
MBo (2004-07-12 11:59:00) [8]логика:
procedure SelectChilds(Item:TTreeItem);
для каждого Child do begin
выбрать его;
SelectChilds(Child);
end;