Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2004.07.25;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.46 MB
Время: 0.036 c
3-1088494421
souLLamer
2004-06-29 11:33
2004.07.25
SQL - игнорирование регистра букв.


14-1088788528
_none_
2004-07-02 21:15
2004.07.25
Почему вы не явились на неофициальную ММП?


3-1088651692
Ozone
2004-07-01 07:14
2004.07.25
"Удобное" хранение данных


1-1089269471
Iraizor
2004-07-08 10:51
2004.07.25
Глуповатый вопрос про SendStream & ProgressBar


14-1088853395
menart
2004-07-03 15:16
2004.07.25
Опять суббота!





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский