✅ Решение задачи 297Time: O(n)
Space: O(n)
💡 Идея1⃣Сериализация🟦Используем прямой обход дерева — сначала обрабатываем текущий узел, затем левое поддерево, затем правое:
➖если узел существует — записываем его значение
➖если узел отсутствует (равен
null) — записываем специальное обозначение
"N"➖в результате все значения объединяются в одну строку, разделённую запятыми
🟦Таким образом, структура дерева сохраняется, потому что на каждом месте в строке либо значение, либо
"N", строго в порядке обхода
2⃣Десериализация🟦Рабиваем строку на части по запятым — получается список значений. Этот список превращаем в очередь, чтобы обрабатывать элементы по порядку
🟦Дальше используем рекурсивную функцию
dfs:
➖берём первый элемент из очереди
➖если это "N" — значит узел отсутствует, возвращаем null
➖если это число — создаём узел с этим значением
➖затем вызываем эту же функцию для левого поддерева, затем для правого
🟦В итоге все узлы дерева рекурсивно восстанавливаются, и структура получается точно такой же, как была до сериализации
👩💻 Java Algo |
#solution297