Ctrl K

Вершины, обходящие своё поддерево

Сложная
Дан корень root двоичного дерева и число need. Назовём вершину сильной, если в её поддереве (сама вершина и все её потомки) найдётся не меньше need вершин со значением строго меньше, чем у неё. Верните количество сильных вершин в дереве.
Пример 1
root=tree_node([8, 3, 9, 1, 5]), need=2 → 1

Под корнем 8 лежат 3, 9, 1, 5 — меньше восьми три из них, подходит. У вершины 3 в поддереве 1 и 5, меньше только 1 — мало. У 9 поддерево из одной вершины. Ответ 1.

Пример 2
root=tree_node([6, 4, 2, 1, 3, 1]), need=1 → 3

Подходят 6 (под ней всё меньше), 4 (под ней 1 и 3) и 2 (под ней 1). Листья не подходят: в их поддереве нет других вершин. Ответ 3.

Пример 3
root=tree_node([2, 2, 2]), need=1 → 0

Все значения равны, а нужно строго меньше — ответ 0.

Ограничения
  • 1 ≤ число вершин ≤ 10⁵
  • -10⁴ ≤ Node.val ≤ 10⁴
  • 1 ≤ need ≤ 10
Встречал эту задачу на настоящем собесе?
Решили0
Пробовали0
Отправок0
Принято—
Темы
Похожие задачиПерестроить дерево поиска СредняяСамый тяжёлый путь в дереве Сложнаяk ключей рядом с целью СложнаяМинимум охранников на дереве СложнаяСтолбцы дерева с ничьими Сложная
загружаем Python…
Вход
root=tree_node([8, 3, 9, 1, 5]), need=2
Ожидается
1

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