Определение глубины вложенности DOM‑дерева

Задайте глубину корня как 0 и найдите максимальную глубину обходом дочерних узлов. Важно различать element.children и childNodes: второй вариант включает текст и комментарии.

Короткий ответ

Что ответить на собеседовании

Задайте глубину корня как 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).

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее