Java Algorithms
111 subscribers
625 photos
623 links
Добро пожаловать💡

Канал для всех, кто ищет качественные решения и объяснения задач на Java

Roadmap по каналу:
https://t.me/algoroadmap/2
Download Telegram
Решение задачи 297

Time: O(n)
Space: O(n)

💡 Идея
1⃣Сериализация
🟦Используем прямой обход дерева — сначала обрабатываем текущий узел, затем левое поддерево, затем правое:
если узел существует — записываем его значение
если узел отсутствует (равен null) — записываем специальное обозначение "N"
в результате все значения объединяются в одну строку, разделённую запятыми

🟦Таким образом, структура дерева сохраняется, потому что на каждом месте в строке либо значение, либо "N", строго в порядке обхода

2⃣Десериализация
🟦Рабиваем строку на части по запятым — получается список значений. Этот список превращаем в очередь, чтобы обрабатывать элементы по порядку

🟦Дальше используем рекурсивную функцию dfs:
берём первый элемент из очереди
если это "N" — значит узел отсутствует, возвращаем null
если это число — создаём узел с этим значением
затем вызываем эту же функцию для левого поддерева, затем для правого

🟦В итоге все узлы дерева рекурсивно восстанавливаются, и структура получается точно такой же, как была до сериализации

👩‍💻 Java Algo | #solution297
Please open Telegram to view this post
VIEW IN TELEGRAM