Имя: Пароль:
1C
1С v8
Обход дерева значений с конца
0 Paimiji
 
12.05.21
11:18
Есть ли какой-нибудь способ обойти дерево значений с конца и при этом неизвестна глубина вложенности дерева?
1 ДенисЧ
 
12.05.21
11:19
Найти конец. И от него плясать вверх.

Только зачем?
2 Paimiji
 
12.05.21
11:19
Или самый простой способ это перевернуть его?
3 fisher
 
12.05.21
11:26
Тю. Гугли "способы обхода дерева" или как-то в этом духе. Их там несколько. Выбирай подходящий.
4 fisher
 
12.05.21
11:27
Хотя я бы начал с определения "конца дерева" и уточнения нужного порядка обхода.
5 fisher
 
12.05.21
11:28
Определения - в смысле определить что вообще такое в твоей голове "конец дерева". Это момент неочевидный.
6 lodger
 
12.05.21
11:28
смотря что ТС имеет ввиду под "способ обойти".

а так, пишем рекурсивные функции через СтрокаДерева.Родитель и СтрокаДерева.Строки;
7 ДенисЧ
 
12.05.21
11:29
(6) Так это сверху получается...
8 acht
 
12.05.21
11:30
(2) > это перевернуть его?
Я бы на это посмотрел.
9 fisher
 
12.05.21
11:33
"Зеленым вверх!" (с) прапора сажают деревья
10 ДенисЧ
 
12.05.21
11:53
11 polosov
 
12.05.21
11:57
Задачи про шарики кончились, теперь на собеседованиях задают вопрос про обход дерева с конца.
12 GANR
 
12.05.21
12:19
(2) можно прикладную задачу? так будет понятнее
13 Повелитель
 
12.05.21
12:55
(0) Почему нет.
В первом цикле пробежаться и записать в массив строки, в нужном порядке.

Во второй обход цикл по массиву.
14 rphosts
 
12.05.21
13:02
(4) видимо самый дальний лист... дерево ведь балансированное
15 Serg_1960
 
12.05.21
13:06
[юмор]
Если учесть что дерево можно сортировать, то вопрос о "конце" дерева становится подобным спору о количестве ангелов на острие иглы...
16 rphosts
 
12.05.21
13:07
(14) * не балансированное
17 ДедМорроз
 
12.05.21
13:10
Я делал обход без стека через массив.
Когда мы встречаем ветку,мы добавляем ее в массив.
С конца массива берём ветку для обработки и добавляем в него все вложенные.
Получается,что каждую ветку мы обходим как бы с конца.
18 mistеr
 
12.05.21
13:15
(0) Ну где там ТС? Неужели корпит над нормальной постановкой задачи, вопреки традициям Мисты?
19 acht
 
12.05.21
13:16
(17) Все это делается банальным порядком действий внутри рекурсивной процедуры
20 GedKo
 
12.05.21
13:21
добавляем колонку "уровень". а дальше цикл от максимального "уровень" + НайтиСтроки() + с продолжить есть Строки.Количество()>0
21 polosov
 
12.05.21
13:26
(20) Ага, добавляем "уровень", пробегаем дерево сверху-вниз и проставляем уровни, а потом развлекаемся обратным обходом?
22 GedKo
 
12.05.21
13:31
(21) при формировании дерева можно сделать и заполнение уровня. а при изменениях - корректировку.

я хз зачем подобное нужно, но если очень нужно - вполне рабочий вариант.
23 Малыш Джон
 
12.05.21
13:39
(0) "все придумано до нас". Лень погуглить?
24 H A D G E H O G s
 
12.05.21
13:58
Дерево.Колонки.Добавить("КолонкаПоиска",Новый ОписаниеТипов("Булево"));
    МассивСтрок=Дерево.Строки.НайтиСтроки(Новый Структура("КолонкаПоиска",Ложь),Истина);
    Для Каждого СтрокаДерева Из МассивСтрок Цикл
        Если СтрокаДерева.Строки.Количество()<>0 Тогда
            Продолжить;
        КонецЕсли;
        РодительскаяСтрока=СтрокаДерева;
        Пока Истина Цикл
            РодительскаяСтрока=РодительскаяСтрока.Родитель;
            Если РодительскаяСтрока=Неопределено Тогда
                Прервать;
            КонецЕсли;            
        КонецЦикла;
    КонецЦикла;
25 АнализДанных
 
12.05.21
14:55
(0)

Процедура ОбходДереваРекурсивно(Дерево)

  Для Каждого Строка Из Дерево.Строки Цикл

    // Если процедура здесь, то обработка идет сверху-вниз
    ОбработатьСтрокуДерева();

    ОбходДереваРекурсивно(Строка);

    // Если процедура здесь, то обработка идет снизу-вверх
    ОбработатьСтрокуДерева();

  КонецЦикла;

КонецПроцедуры
26 H A D G E H O G s
 
12.05.21
15:04
(25) Где то на тысячной строке, 1С превратиться в тыкву.
27 acht
 
12.05.21
15:17
(26) Уровне
28 H A D G E H O G s
 
12.05.21
15:24
(27) да, пардон, уровне
29 МихаилМ
 
12.05.21
15:32
(0)что такое конец дерева значений?
30 fisher
 
12.05.21
15:39
Где начало того конца, которым оканчивается начало? (с) Козьма Прутков
31 polosov
 
12.05.21
15:41
(30) В начале же. НУ что за вопрос у ребят Прутковых.
32 Bigbro
 
12.05.21
15:44
главное начиная обходить дерево с конца - не обнаружить себя в лесу...
33 H A D G E H O G s
 
12.05.21
15:49
(29) Массив листьев
34 Cthulhu
 
12.05.21
15:51
"А этот пацак все время говорит на языках, продолжения которых не знает!" (с)
- ... что нам мешает выполнить задачу?
— Геометрия, — со вздохом говорит Петров.
— Ну, вы просто не обращайте на нее внимания, вот и все! — произносит Морковьева.(с)
автор, что за бред ты несешь?.
1) с конца которой из веток дерева?
2) добрались до развилки - дальше куда идем? вверх - игнорируя другое ответвление от развилки? тогда это будет не обход (пропуски). вниз по другой ветке от развилки? тогда это не обход с конца - потому что вниз.
итого:
35 Cthulhu
 
12.05.21
15:52
(33): вот да, разве что. не от конца, а от массива концов.
36 Йохохо
 
12.05.21
15:53
(33) это поверхность, но не граница и не конец
37 tesei
 
12.05.21
17:31
(30) В конце концов среди концов конец найдётся наконец!

Однажды нес пастух куда-то молоко,
Но так ужасно далеко,
Что уж назад не возвращался.
Читатель! он тебе не попадался?

К. Прутков.
Здесь можно обсудить любую тему при этом оставаясь на форуме для 1Сников, который нужен для работы. Ymryn