✅ Решение задачи 272
Time: O(n)
Space: O(n)
💡 Идея🟦Решение сводится к
знакомому алгоритму на нахождение
k ближайших элементов с применением бинарного поиска, если собрать отсортированный список из узлов дерева
🟦Для этого необходимо пройти бинарное дерево поиска
in-order:
➖рекурсивно проходим до самого левого элемента (наименьшего), затем, поднимаясь вверх по стеку рекурсии, добавляем значение узла в список и переходим к правому поддереву, продолжая обход
🟦В результате получаем отсортированный список, к которому применяем бинарный поиск для нахождения левой границы ответа:
➖если элемент
mid ближе к
target, чем
mid + k, значит элемент
mid + k, а также каждый элемент справа от него не может быть в ответе, поэтому, перемещаем правую границу
➖та же самая логика, но в обратном порядке — если элемент
mid + k ближе к
target, перемещаем левую границу
🟦В конце возвращаем
k элементов из списка, используя найденную границу:
subList(left, left + k)👩💻 Java Algo |
#solution272