1С 8.3 Получить уровень вложенности дерева значений
Данные > Примеры кода 1С > 1С 8.3 Дерево значений
Перейти в раздел примеры кода 1С 8.3:

Функция вычисляет максимальную глубину (уровень вложенности) дерева значений.
Параметры:
ДеревоЗначений – Входное дерево значений, для которого определяется максимальная глубина.
Возвращаемое значение:
Число – максимальная глубина дерева (минимальное значение: 1, если есть хотя бы корневая строка).
Алгоритм работы:
Инициализирует переменную МаксГлубина со значением 0.
Для каждой корневой строки дерева вызывает вспомогательную функцию РекурсивныйОбходДерева, передавая текущую строку и начальную глубину (1).
Обновляет МаксГлубина, выбирая максимальное значение между текущей глубиной и результатом рекурсивного обхода.
Возвращает итоговую максимальную глубину.
Описание функции РекурсивныйОбходДерева
Назначение:
Вспомогательная рекурсивная функция для обхода поддерева и определения его глубины.
Параметры:
Строка – Текущая строка дерева значений.
ТекущаяГлубина – Глубина текущего уровня вложенности.
Возвращаемое значение:
Число – максимальная глубина для текущего поддерева.
Алгоритм работы:
Запоминает текущую глубину как локальный максимум.
Для каждой подчиненной строки рекурсивно вызывает себя, увеличивая глубину на 1.
Сравнивает глубину каждой ветви и возвращает максимальное значение.
Пример использования:
МаксГлубинаДерева = ПолучитьМаксГлубинуДерева(ДеревоЗначений);
// Примечание: Функция корректно обрабатывает деревья любой структуры, включая отсутствие строк (вернет 0) или сложные ветвящиеся иерархии.
Найти макс. глубину дерева значений в 1С в 1С 8.3:
Функция ПолучитьМаксГлубинуДерева(ДеревоЗначений) Экспорт
МаксГлубина = 0;
Для Каждого Строка Из ДеревоЗначений.Строки Цикл
МаксГлубина = Макс(МаксГлубина, РекурсивныйОбходДерева(Строка, 1));
КонецЦикла;
Возврат МаксГлубина;
КонецФункции
Функция РекурсивныйОбходДерева(Строка, ТекущаяГлубина)
МаксГлубина = ТекущаяГлубина;
Для Каждого ПодчиненнаяСтрока Из Строка.Строки Цикл
МаксГлубина = Макс(МаксГлубина, РекурсивныйОбходДерева(ПодчиненнаяСтрока, ТекущаяГлубина + 1));
КонецЦикла;
Возврат МаксГлубина;
КонецФункции
// МаксГлубинаДерева = ПолучитьМаксГлубинуДерева(ДеревоЗначений);
МаксГлубина = 0;
Для Каждого Строка Из ДеревоЗначений.Строки Цикл
МаксГлубина = Макс(МаксГлубина, РекурсивныйОбходДерева(Строка, 1));
КонецЦикла;
Возврат МаксГлубина;
КонецФункции
Функция РекурсивныйОбходДерева(Строка, ТекущаяГлубина)
МаксГлубина = ТекущаяГлубина;
Для Каждого ПодчиненнаяСтрока Из Строка.Строки Цикл
МаксГлубина = Макс(МаксГлубина, РекурсивныйОбходДерева(ПодчиненнаяСтрока, ТекущаяГлубина + 1));
КонецЦикла;
Возврат МаксГлубина;
КонецФункции
// МаксГлубинаДерева = ПолучитьМаксГлубинуДерева(ДеревоЗначений);
0
комментарии
____________________
Перепечатка текста и фотографий разрешена при наличии прямой ссылки на источник