Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.07.25;
Скачать: CL | DM;

Вниз

Деревья и рекурсия   Найти похожие ветки 

 
ydv   (2004-07-12 11:37) [0]

Есть такая задачка.
Дана таблица вида:
codeup     name       codethis
0      | Авто       | 10
0      | Мото       | 20
10     | Жигули     | 40
20     | Ява        | 50
40     | модель 2106| 60
50     | модель 350 | 70
40     | модель 2109| 80

в результате некоторой обработки получается дерево вида:
-Авто
   -Жигули
        -модель 2106
        -модель 2109
-Мото
   -Ява
        -модель 350

Стоит задача выбрать все элементы, относящиеся, например, к ветке Авто. Понимаю, что надо применять рекурсию. А вот как - не знаю.


 
MBo ©   (2004-07-12 11:59) [1]

логика:

procedure SelectChilds(Item:TTreeItem);
для каждого Child do begin
 выбрать его;
 SelectChilds(Child);
end;


 
ydv   (2004-07-12 12:22) [2]

Дело в том, что это не VCL-дерево (TTreeView), а просто таблица, которую можно представить в виде дерева для наглядности.


 
Sheng ©   (2004-07-12 12:25) [3]

Напиши, каким образом представлены данные после обработки (пример кода - описание массива)


 
ydv   (2004-07-12 12:33) [4]

а никаким, просто есть таблица и всё, которую можно в виде дерева представить, а можно и не представлять. Главная задача - выбирать все подчиненные элементы до самого последненго уровня и заполнять другую таблицу.


 
MBo ©   (2004-07-12 12:34) [5]

>Дело в том, что это не VCL-дерево (TTreeView), а просто таблица
Ничего в принципе не изменится - вместо типа TTreeItem твой будет, а детишки у тебя - раз имеется дерево - значит, как-то организованы.


 
Sheng ©   (2004-07-12 12:45) [6]

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);

теоретически, должно работать


 
ydv   (2004-07-12 13:09) [7]

Ок. Попробую.


 
Sheng ©   (2004-07-12 13:34) [8]

Да, и ещё в условии надо поставить проверку, если элемент не выделен.



Страницы: 1 вся ветка

Текущий архив: 2004.07.25;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.055 c
1-1089804609
Artem123
2004-07-14 15:30
2004.07.25
Найти нужный TreeNode ?


14-1088939043
Nick Denry
2004-07-04 15:04
2004.07.25
Windows .VBS (WSH) как альтернатива Linux .SH


1-1089727436
SergBlack
2004-07-13 18:03
2004.07.25
динамическое создание TQChart в Quickrep


3-1088473351
bigfoot
2004-06-29 05:42
2004.07.25
DBGrid + XML


14-1088540954
Marser
2004-06-30 00:29
2004.07.25
Винница!!! Земляки, отзовитесь!