serialize and deserialize binary tree

🏠

Credit: S. Pochmann

 1class Codec:
 2
 3    def serialize(self, root):
 4        def doit(node):
 5            if node:
 6                vals.append(str(node.val))
 7                doit(node.left)
 8                doit(node.right)
 9            else:
10                vals.append('#')
11        vals = []
12        doit(root)
13        return ' '.join(vals)
14
15    def deserialize(self, data):
16        def doit():
17            val = next(vals)
18            if val == '#':
19                return None
20            node = TreeNode(int(val))
21            node.left = doit()
22            node.right = doit()
23            return node
24        vals = iter(data.split())
25        return doit()