Ctrl K

Список узлов в прямом порядке

Средняя
Двоичное дерево выгружено в список rows: каждая строка [id, parent] содержит номер узла и номер его родителя (у корня parent = -1). Номера узлов различны, и строки вместе действительно образуют двоичное дерево — у каждого узла не больше двух детей. Какой ребёнок левый, а какой правый, не сказано. Проверьте, можно ли так расставить детей, чтобы порядок строк в rows совпал с прямым обходом дерева: сначала узел, затем целиком его левое поддерево, затем целиком правое. Верните True, если можно, и False иначе.
Пример 1
rows=[[7, -1], [3, 7], [5, 3], [1, 7]] → True

Корень 7, у него дети 3 и 1, у 3 — ребёнок 5. Обход 7 → 3 → 5 → 1 — прямой: сначала поддерево 3 целиком, потом 1.

Пример 2
rows=[[7, -1], [3, 7], [1, 7], [5, 3]] → False

После 3 встретился 1, хотя поддерево 3 (узел 5) ещё не пройдено. Ни при каком выборе левого и правого ребёнка такой порядок не получится.

Пример 3
rows=[[4, -1]] → True
Ограничения
  • 1 ≤ len(rows) ≤ 10⁵
  • rows[i] = [id, parent], 0 ≤ id ≤ 10⁵, -1 ≤ parent ≤ 10⁵
  • Номера узлов различны
  • Строки образуют двоичное дерево с ровно одним корнем
Встречал эту задачу на настоящем собесе?
Решили0
Пробовали0
Отправок0
Принято—
Темы
Похожие задачиДерево в правую цепочку СредняяДерево из скобочной записи СредняяПара из двух деревьев поиска СредняяСлева, вершина, справа ЛёгкаяСначала родитель, потом дети Лёгкая
загружаем Python…
Вход
rows=[[7, -1], [3, 7], [5, 3], [1, 7]]
Ожидается
True

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