Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 8 общая

Обход дерева значений с конца

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

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

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

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

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

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

    // Если процедура здесь, то обработка идет сверху-вниз

    ОбработатьСтрокуДерева();

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

    // Если процедура здесь, то обработка идет снизу-вверх

    ОбработатьСтрокуДерева();

  КонецЦикла;

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

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

К. Прутков.


Список тем форума
 
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.