Serialize and Deserialize Binary Tree – Python 3 (Week 14 – 11)

# 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
        """
        if not root:
            return []
            
        data = []
        queue = collections.deque([root])
        while queue:
            node = queue.popleft()
            data.append(str(node.val) if node else '#')
            if node:
                queue.append(node.left)
                queue.append(node.right)
                
        return ','.join(data)
        
        

    def deserialize(self, data):
        """Decodes your encoded data to tree.
        
        :type data: str
        :rtype: TreeNode
        """
        if not data:
            return None
        
        order = [
            TreeNode(int(val)) if val != '#' else None
            for val in data.split(',')
        ]
        root = order[0]
        cur_node_index = 0
        cur_child_index = 1
        nodes = [root]
        while cur_node_index < len(nodes):
            node = nodes[cur_node_index]
            cur_node_index += 1
            node.left = order[cur_child_index]
            node.right = order[cur_child_index + 1]
            cur_child_index += 2
            if node.left:
                nodes.append(node.left)
            if node.right:
                nodes.append(node.right)
        return root
            
        

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

Time, Space O(n).

Leave a comment

Design a site like this with WordPress.com
Get started