Имя: Пароль:
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) В конце концов среди концов конец найдётся наконец!

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

К. Прутков.