130 / 109 / 22
Регистрация: 23.05.2015
Сообщений: 726
Delphi 6-7

Проблема с рекурсивным обходом дерева

04.07.2022, 18:24. Показов 2797. Ответов 22

Студворк — интернет-сервис помощи студентам
Здравствуйте, уважаемые форумчане.

Построил дерево контрагентов, таблица (contra), привязанное к базе данных поля ID, PARENTID ..., VISIBLE.
У меня есть процедура, которая удаляет 1 выделенный элемент дерева и соответственно из таблицы contra.

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
procedure TForm1.MenuItem3Click(Sender: TObject);
var id, id1:integer;
begin
IF TreeContra.Selected <> nil Then
   Begin
   if TreeContra.Selected.HasChildren then
   begin
     showmessage('Нельзя удалить элемент! Есть вложенные. Сначала нужно удалить их.');
     exit;
   end;
   ID:=Integer(TreeContra.Selected.Data);
   DM1.QContra.Close;
   DM1.QContra.SQL.Clear;
   DM1.QContra.SQL.Add('Select * From Contra Where ID=:ID');
   DM1.QContra.Params.ParamByName( 'ID').Value:=ID;
   DM1.QContra.Open;
    if ID = 0 then
    begin
      showmessage('Самый верхний уровень удалять нельзя!');
     exit;
    end;
   for id1 := 0  to DM1.QContra.RecordCount-1  do
   begin
        DM1.QContra.Delete;
   end;
    TreeContra.Items.Delete(TreeContra.Selected);
   End;
 
end;
Но это не совсем то чего я хочу, мне нужно рекурсивно обойти все подветви дерева,
начиная с выделенной и записать в поле VISIBLE (c запросом на обновление справлюсь) значение F.

Добавлено через 4 часа 24 минуты
На одном из сайтов товарищ предлагает такое решение:

It's easiest to do this recursively, something like this:

Delphi
1
2
3
4
5
6
7
8
9
procedure WalkChildren(Node: TTreeNode; List: TList<TTreeNode>);
var
  i: Integer;
begin
  List.Add(Node);
  for i := 0 to Node.Count-1 do begin
    WalkChildren(Node[i], List);
  end;
end;

Call it like this:

List := TList<TTreeNode>.Create;
WalkChildren(Root, List);
This example adds to a list but you can replace that action with one of your choosing.

Но что имеется ввиду под списком, синтаксис которого(List: TList<TTreeNode>) не работает (скорее всего это какое то общее представление..
И будет ли работать отсюда
Delphi
1
TreeContra.Selected
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
04.07.2022, 18:24
Ответы с готовыми решениями:

Сравнение SOAP сообщений рекурсивным обходом
Всем привет. Встала такая задача: Есть 2 SOAPMessage одинаковой структуры. Одно корректное, а другое с дефектом. Необходимо, взяв 1...

Несбалансированное бинарное дерево с рекурсивным обходом в обратном порядке
добрый день. помогите пожалуйста с реализацией кода: .Несбалансированное бинарное дерево с рекурсивным обходом в обратном порядке (левое...

Заменить некоторие строки во всех файлах рекурсивным обходом
нужно заменить некоторие строки во всех файлах с рекурсивным обходом. Сделал вот так, но скрипт обрабатывет только одну директорию внутри,...

22
130 / 109 / 22
Регистрация: 23.05.2015
Сообщений: 726
16.12.2022, 13:50  [ТС]
Студворк — интернет-сервис помощи студентам
Цель этого действа - скрыть элементы которые не нужны в данный момент и при обновлении дерева из базы не отображать то что не Visible. Например, мы не работаем с каким либо из поставщиков длительный период времени.
Думаю, что аналогично работает в некоторых программах - пометить объект удаленным.
0
 Аватар для krapotkin
6854 / 4680 / 1465
Регистрация: 14.04.2014
Сообщений: 20,684
Записей в блоге: 21
16.12.2022, 14:22
поэтому я собсно и спросил - нужно ли это для всех пользователей. Если да - то нет вопросов
0
130 / 109 / 22
Регистрация: 23.05.2015
Сообщений: 726
16.12.2022, 18:59  [ТС]
Да. Конечно для всех.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
16.12.2022, 18:59

Помогите с обходом дерева
Нужно решить задачку: Реализовать каждый из 3 способов обхода дерева, создать прог демонстрирующую работу дерева. Помогите...

Разобраться с левосторонним обходом бинарного дерева
Здравствуйте,помогите подробно разобраться как происходит левосторонний обход дерева на примере Код: void TREE::ObhodLeft (node **w) ...

Занумеровать вершины дерева двоичного поиска в соответствии с их обходом во внутреннем порядке
Привет Задача такова: Построить дерево двоичного поиска для заданного множества це- лых чисел и занумеровать его вершины в...

Написать программу вычисления глубины двоичного дерева с симметричным обходом в глубину
Здравствуйте, помогите написать программу вычисления глубины двоичного дерева с симметричным обходом в глубину. Очень нужно , помогите...

Обходом дерева с рекурсией (pre, in, post order) вывести число вершин, значение которых равно заданному x
Используя обход с рекурсией(pre,in,post order) вывести кол-во вершин значение которых ровно заданному x; ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
23
Ответ Создать тему
Опции темы

Новые блоги и статьи
Был там один разговор по поводу свободы в материальном мире.
kumehtar 19.08.2026
Суть: рассматривается живое существо, оказавшееся внутри довольно странной системы (этого мира) и пытающееся обустроить в ней свой кусок пространства. Жизнь действительно предъявляет каждому. . .
Когда логика программы не спасает от человеческих ошибок
Maks 18.08.2026
В последнее время всё чаще и чаще сталкиваюсь с таким явлением, как абсолютная невнимательность (или глупость) пользователей. Проявляется это чаще всего на работе в коллективе. Допустим, человек с. . .
Лето уходит
kumehtar 17.08.2026
Мысли в слух
kumehtar 17.08.2026
Забавно, насколько сейчас стала доступна информация. Например о магии, духовном развитии, медитациях, и других подобных направлениях, ранее зачастую тайных, передаваемых от учителя к ученику. Хотя. . .
Перемещение строк из ТЧ в другой документ с учетом текущего пробега
Maks 17.08.2026
Реализация из решения ниже выполнена на примере нетипового документа "Автозапчасти", с ТЧ "Шины". За основу взят алгоритм отсюда: https:/ / www. cyberforum. ru/ blogs/ 359708/ 10838. html Задача: . . .
Саморегулирующийся социальный контракт для сервера cross-section.
Hrethgir 14.08.2026
С кодом конечно таких глубоких размышлений пока не было, впрочем я уже привык к алгоритмизации. Суть предмета записи: снова в диалоге с нейросетью (я взял пока себе ник для учётки админа - Rector). . . .
Часы электронные
Uhbif79 12.08.2026
Выкладываю программу часов. Программа позволяет: 1. Использовать системное время и дату, 2. Есть возможность вводить время и дату вручную. 3. Реализованы 2 будильника: начало и конец рабочего дня. . . .
Часы с будильником на основе класса QLCDNumber
Uhbif79 12.08.2026
Всем добрый день, выкладываю программу часов с будильником на основе класса QLCDNumber. Здесь я пробовал самостоятельно создавал классы, впервые столкнулся с видимостью переменной одного класса из. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru