Serialize and Deserialize Binary Tree

Hard Subject: Trees
Time Complexity
O(N)
Space Complexity
O(N)

Problem Description

Design an algorithm to serialize and deserialize a binary tree. There is no restriction on how your serialization/deserialization algorithm should work.

Optimal Solution

Python
def serialize(root):
    def dfs(node):
        if not node:
            return "None"
        return str(node.val) + "," + dfs(node.left) + "," + dfs(node.right)
    return dfs(root)

def deserialize(data):
    vals = data.split(",")
    self.i = 0
    def dfs():
        if vals[self.i] == "None":
            self.i += 1
            return None
        node = TreeNode(int(vals[self.i]))
        self.i += 1
        node.left = dfs()
        node.right = dfs()
        return node
    return dfs()