Это часть моей серии, где я замечу, учится у LeetCode. Если у вас есть лучшие решения или идеи, пожалуйста, оставьте комментарий!
Проблемы
Сериализовать и десериализовать бинарное дерево
Мы должны сериализовать данное двоичное дерево на струну, а затем десериализовать струну к бывшему двоичному дереву. Итак, давайте начнем с размышлений о том, как пересечь дерево.
Подход
( https://leetcode.com/explore/learn/card/data-structure-tree/133/conclusion/995/ )
Для начала давайте подумаем о приведенном выше примере. В приведенном выше примере выходная строка равен [1, 2, 3, нулевой, нулевой, 4, 5]. Чтобы пройти дерево, BFS или DFS полезны, и мы должны подумать, какой из них лучше.
DFS более адаптирован, потому что его будет легче десериализировать, чем BFS, потому что порядок узла, кодируемый на BFS, основан на сцеплении узлов. Если вы знаете другую причину использовать DFS или думаете, что BFS более адаптирован и знаете причину, по которой это так, оставьте свой комментарий о своем мнении!
Решение
class Codec: def serialize(self, root): """ Encodes a tree to a single string. :type root: TreeNode :rtype: str """ def encode(root, string): """ a recursive helper function for the serialize() function.""" # check base case if root is None: string += 'None,' else: string += str(root.val) + ',' string = encode(root.left, string) string = encode(root.right, string) return string return encode(root, '') # Deserialization class Codec: def deserialize(self, data): """Decodes your encoded data to tree. :type data: str :rtype: TreeNode """ def decode(l): """ a recursive helper function for deserialization.""" if l[0] == 'None': l.pop(0) return None root = TreeNode(l[0]) l.pop(0) root.left = decode(l) root.right = decode(l) return root data_list = data.split(',') root = decode(data_list) return root
Спасибо, что прочитали эту статью! Я всегда приветствую ваши отзывы, вопрос и идею.
Оригинал: “https://dev.to/shoryu/serialize-and-deserialize-binary-tree-3d76”