Задайте глубину корня как 0 и найдите максимальную глубину обходом дочерних узлов. Важно различать element.children и childNodes: второй вариант включает текст и комментарии.
Определение глубины вложенности DOM‑дерева
Задайте глубину корня как 0 и найдите максимальную глубину обходом дочерних узлов. Важно различать element.children и childNodes: второй вариант включает текст и комментарии.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Создайте функцию, принимающую элемент DOM и возвращающую числовое значение, отражающее наибольший уровень вложения дочерних узлов внутри данного элемента.
Ответ
Задайте глубину корня как 0 и найдите максимальную глубину обходом дочерних узлов. Важно различать element.children и childNodes: второй вариант включает текст и комментарии.
function domDepth(root) {
let maximum = 0;
const stack = [[root, 0]];
while (stack.length) {
const [node, depth] = stack.pop();
maximum = Math.max(maximum, depth);
for (const child of node.childNodes) stack.push([child, depth + 1]);
}
return maximum;
}
Лист без дочерних узлов имеет глубину 0. Если нужны только уровни HTML-элементов, замените childNodes на children; пробельные текстовые узлы тогда не считаются. Shadow DOM и содержимое iframe не входят в обычный обход и требуют отдельной политики. Время O(n), память до O(n).