Связный список, в котором каждый узел указывает на два узла и нет циклов.

Преимущество деревьев по сравнению со связанными списками заключается в том, что нам не всегда нужно искать все узлы (поскольку вы не можете пропустить узлы в связанном списке), но можно пройти по определенным путям в зависимости от искомого значения.

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

Бинарное дерево поиска

Дерево, в котором левые дочерние узлы меньше корня, а правые дочерние узлы больше или равны корневому.

Временная сложность бинарного дерева поиска

  • Вставка: log n (сбалансированная), n (несбалансированная)
  • Удалить: log n (сбалансированный), n (несбалансированный)
  • Поиск: log n(сбалансированный), n (несбалансированный)

Разминка

Найти, существует ли данный номер в BST?

Как бы вы нашли число в BST, наиболее близкое к данному числу?

Большинство вопросов на основе дерева включают рекурсию. Поэтому, если вы столкнетесь с вопросом на основе дерева, подумайте о рекурсии!

Базовый

  • Вычислите глубину дерева.
  • Проверьте, является ли данное дерево допустимым BST
  • Выведите уровень обхода дерева.

Дополнительно

  • Создайте сбалансированное бинарное дерево поиска из отсортированного массива
  • Выведите «зигзагообразный обход» дерева. Зигзагообразный обход — это поуровневый обход дерева, при котором каждый четный уровень обходится слева направо, а нечетный — справа налево.
  • У вас есть n строк. Найдите самый длинный префикс, который встречается не менее чем в 3 строках. Например, если вам даны строки “abcde”, “ijkl”, “abxyz”, “abcdefghi”, “iabcdef”,, самый длинный префикс, встречающийся как минимум в 3 строках, будет «ab». (Да, это вопрос о дереве. Постарайтесь быть конкретным.)

Загляните на наш Github

Автор Programming Interview Prep