Рубрики
Без рубрики

Сериализовать и десериализовать бинарное дерево

Это часть моей серии, где я замечу, учится у LeetCode. Если у вас есть лучшие решения или идеи, … с меткой Python, начинающих, LeetCode, информатики.

Это часть моей серии, где я замечу, учится у 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”