Бесплатная бета: 30 дней полного доступа, без карты.Зарегистрироваться бесплатно

Мы используем необходимые куки для работы сайта (вход и язык). Формы обратной связи и сообщения об ошибке дополнительно используют Google reCAPTCHA для защиты от спама. Она загружается только если вы согласитесь. Политика конфиденциальности

Полевой справочник

Обход дерева

O(n)

Рекурсивно (или с явной очередью/стеком) посетить каждый узел дерева в заданном порядке, собирая или объединяя значения по пути.

Сигналы

бинарное дерево задано как корневой узел с указателями left/rightпосетить каждый узел (прямой / симметричный / обратный / по уровням)посчитать глубину, высоту или сумму по всему деревуобработать детей до или после родителявывод по уровням (BFS с очередью)

Шаблон

function traverse(node, result = []) {
    if (!node) return result; // base case
    traverse(node.left, result);
    result.push(node.val); // inorder here; move this line for pre/post
    traverse(node.right, result);
    return result;
}

Похоже, но не то

  • BFS/DFS по графу: У дерева нет циклов, и у каждого узла ровно один родитель, поэтому обычный рекурсивный обход или обход через очередь никогда не заходит в узел повторно и не требует множества посещённых. У обычного графа есть циклы и несколько родителей, поэтому BFS/DFS там обязаны хранить множество посещённых узлов.

n узлов, каждый посещается ровно один раз -> O(n) времени. Глубина рекурсии O(h) (или явная очередь O(n) для обхода по уровням), причём h может доходить до n на вырожденном дереве.

Изучить этот паттерн