Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Задачи

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад
Вопрос про JavaScript: tree traversal, partial relevance, node filtering, recursive search

Как обрабатывать ситуацию, когда промежуточная нода нерелевантна, но её потомки — релевантны?

Проверяет понимание обработки частично релевантных деревьев в контексте поиска или фильтрации данных.

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

Когда промежуточная нода нерелевантна, но её потомки релевантны, нужно рекурсивно обходить дерево, игнорируя нерелевантные узлы, но продолжая проверять их дочерние элементы. Это позволяет сохранить релевантные поддеревья, даже если родительский узел не соответствует критериям. Такой подход часто используется в поисковых системах или при фильтрации иерархических данных.

Длинный ответ

Проблема частично релевантных деревьев

В иерархических структурах данных часто возникает ситуация, когда узел сам по себе не соответствует критериям поиска, но его потомки являются релевантными. Простое отбрасывание нерелевантного узла приведет к потере всех его дочерних элементов, что нежелательно.

Решение: рекурсивный обход с сохранением структуры

Необходимо реализовать рекурсивную функцию, которая проверяет каждый узел. Если узел нерелевантен, мы не добавляем его в результат, но продолжаем рекурсивно обрабатывать его потомков. Если потомки релевантны, они добавляются в результат, сохраняя свою иерархию.

function filterTree(node, isRelevant) {
  const filteredChildren = (node.children || [])
    .map(child => filterTree(child, isRelevant))
    .filter(child => child !== null);

  if (isRelevant(node)) {
    return { ...node, children: filteredChildren };
  } else if (filteredChildren.length > 0) {
    // Узел нерелевантен, но есть релевантные потомки
    return { ...node, children: filteredChildren };
  }
  return null;
}

Применение на практике

Этот подход используется в:

  • Поисковых системах для файловых систем (например, найти все файлы .txt, игнорируя пустые папки)
  • Фильтрации меню или категорий товаров в интернет-магазинах
  • Обработке DOM-деревьев при парсинге веб-страниц

Вывод

Данный метод позволяет гибко обрабатывать иерархические данные, сохраняя релевантные поддеревья даже при нерелевантных родительских узлах. Это особенно полезно в системах, где важна структура данных, а не только отдельные элементы.

  • Аватар

    Python Guru

    Sergey Filichkin

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.

Уровень

  • Рейтинг:

    4

  • Сложность:

    6

Навыки

  • JavaScript

    JavaScript

  • Networks

Ключевые слова

#tree traversal

#partial relevance

#node filtering

#recursive search

Подпишись на Python Developer в телеграм

  • Аватар

    Python Guru

    Sergey Filichkin

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.