Ctrl K

Обрезать помеченные листья

Средняя
Дан корень root двоичного дерева и число mark. Удалите из дерева все листья со значением mark. После удаления листа его родитель может сам стать листом. Если у такого родителя тоже значение mark, удалите и его — и так далее, пока в дереве не останется ни одного листа со значением mark. Верните корень получившегося дерева (или пустое дерево, если удалено всё).
Пример 1
root=tree_node([4, 7, 9, 7, None, 7, 7]), mark=7 → [4, None, 9]

Сначала срезаются три листа со значением 7. После этого левый ребёнок корня (тоже 7) становится листом и тоже уходит. Вершина 9 осталась без детей, но её значение не 7, поэтому она остаётся.

Пример 2
root=tree_node([5, 5, None, 5]), mark=5 → None

Цепочка из пятёрок срезается снизу вверх целиком, включая корень, — остаётся пустое дерево.

Пример 3
root=tree_node([3, 8, 2, None, 6]), mark=8 → [3, 8, 2, None, 6]

Вершина 8 не лист — у неё есть ребёнок 6, поэтому ничего не удаляется.

Ограничения
  • Число вершин от 1 до 10⁵
  • 1 ≤ значение вершины ≤ 1000
  • 1 ≤ mark ≤ 1000
Встречал эту задачу на настоящем собесе?
Решили0
Пробовали0
Отправок0
Принято—
Темы
Похожие задачиЭто дерево поиска? СредняяДве перепутанные вершины СредняяВсе пути до листьев с заданной суммой СредняяДерево в правую цепочку СредняяСумма чисел на ветвях Средняя
загружаем Python…
Вход
root=tree_node([4, 7, 9, 7, None, 7, 7]), mark=7
Ожидается
[4, None, 9]

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