Leetcode 449 Solution

This article provides solution to leetcode question 449 (serialize-and-deserialize-bst).

https://leetcode.com/problems/serialize-and-deserialize-bst

Solution

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

class Codec:

    def serialize(self, root: Optional[TreeNode]) -> str:
        """Encodes a tree to a single string.
        """
        tokens = []
        
        def _serialize(node):
            if not node:
                tokens.append("#")
                return

            tokens.append(str(node.val))
            _serialize(node.left)
            _serialize(node.right)
        
        _serialize(root)
        
        return " ".join(tokens)

    def deserialize(self, data: str) -> Optional[TreeNode]:
        """Decodes your encoded data to tree.
        """
        tokens = data.split(" ")
        
        i = 0
        def _deserialize():
            nonlocal i
            
            if i == len(tokens) or tokens[i] == "#":
                i += 1
                return None
                        
            node = TreeNode(int(tokens[i]))
            i += 1

            node.left = _deserialize()
            node.right = _deserialize()
            
            return node

        return _deserialize()


# Your Codec object will be instantiated and called as such:
# Your Codec object will be instantiated and called as such:
# ser = Codec()
# deser = Codec()
# tree = ser.serialize(root)
# ans = deser.deserialize(tree)
# return ans