Вопрос проверяет понимание рекурсивного обхода древовидных структур данных, что необходимо для работы с DOM, файловыми системами и алгоритмами.
Рекурсивный обход дерева — это способ последовательного посещения всех узлов дерева, при котором функция вызывает саму себя для обработки поддеревьев. Дерево состоит из корневого узла и поддеревьев, каждое из которых само является деревом. Именно эта самоподобная структура делает рекурсию идеальным инструментом для обхода.
Существует несколько вариантов рекурсивного обхода в зависимости от порядка обработки узлов:
Рассмотрим обход бинарного дерева поиска с выводом значений в порядке возрастания (симметричный обход):
function inOrderTraversal(node) {
if (node === null) return;
inOrderTraversal(node.left); // обход левого поддерева
console.log(node.value); // обработка текущего узла
inOrderTraversal(node.right); // обход правого поддерева
}Для дерева с корнем 10, левым потомком 5 и правым 15, вызов inOrderTraversal(root) выведет: 5, 10, 15.
Рекурсивный обход используется в:
Рекурсивный обход дерева — это простой и выразительный способ обработки иерархических данных. Его стоит применять, когда структура данных естественно рекурсивна, а глубина дерева не превышает допустимый размер стека вызовов (обычно до нескольких тысяч уровней).