LC 0297 [H] Serialize and Deserialize Binary Tree - ALawliet/algorithms GitHub Wiki

  • serialize: preorder DFS
  • deserialize: queue with preorder DFS

# Definition for a binary tree node.
# class TreeNode(object):
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = None

class Codec:

    def serialize(self, root):
        """Encodes a tree to a single string.
        
        :type root: TreeNode
        :rtype: str
        """
        def preorder(node):
            if not node:
                vals.append('#')
            else:
                vals.append(str(node.val))
                preorder(node.left)
                preorder(node.right)

        vals = []
        preorder(root)
        return ' '.join(vals)

    def deserialize(self, data):
        """Decodes your encoded data to tree.
        
        :type data: str
        :rtype: TreeNode
        """
        def preorder():
            val = Q.popleft()

            if val == '#':
                return None
            else:
                node = TreeNode(int(val))
                node.left = preorder()
                node.right = preorder()
                return node

        Q = deque(data.split())
        return preorder()
        

# Your Codec object will be instantiated and called as such:
# codec = Codec()
# codec.deserialize(codec.serialize(root))