Ctrl K

k ключей рядом с целью

Сложная
Дан корень root двоичного дерева поиска с различными ключами, вещественное число target и целое k. Найдите k ключей дерева, которые ближе всего к target, то есть у которых |ключ - target| наименьшее. Гарантируется, что набор из k ближайших ключей определяется однозначно. Ключи можно вернуть в любом порядке. Дополнительно: если дерево сбалансировано, сможете ли вы обойтись временем меньше O(n)?
Пример 1
root=tree_node([20, 10, 30, 5, 15, None, 40]), target=17.5, k=3 → [10, 15, 20]

Расстояния от 17.5: до 15 — 2.5, до 20 — 2.5, до 10 — 7.5, до 30 — 12.5. Три ближайших ключа: 15, 20 и 10.

Пример 2
root=tree_node([8, 3]), target=100.0, k=1 → [8]

Цель больше всех ключей, ближайший к ней — наибольший ключ 8.

Ограничения
  • Число узлов n: 1 ≤ k ≤ n ≤ 10⁴
  • 0 ≤ Node.val ≤ 10⁹, ключи различны
  • -10⁹ ≤ target ≤ 10⁹
  • Набор из k ближайших ключей единственный
Встречал эту задачу на настоящем собесе?
Решили0
Пробовали0
Отправок0
Принято—
Темы
Похожие задачиПара из двух деревьев поиска СредняяПара в дереве поиска ЛёгкаяДерево поиска в одну линию ЛёгкаяСамое тяжёлое поддерево поиска СложнаяСлева, вершина, справа Лёгкая
загружаем Python…
Вход
root=tree_node([20, 10, 30, 5, 15, None, 40]), target=17.5, k=3
Ожидается
[10, 15, 20]

«Запустить» — первые 3 теста у тебя в браузере, «Отправить» — все 53 теста на сервере, включая скрытые.