449. 序列化和反序列化二叉搜索树

exiaohu 于 2022-05-11 发布

题目链接:449. 序列化和反序列化二叉搜索树

串行化规则:{root_node},{serilaization_length},{left_node},{right_node}

class Codec:

    NULL = ''

    def serialize(self, root: TreeNode) -> str:
        """Encodes a tree to a single string.
        """
        if root is None:
            return self.NULL

        l, r = self.serialize(root.left), self.serialize(root.right)
        return f'{root.val},{len(l)},{l}{r}'

    def deserialize(self, data: str) -> Optional[TreeNode]:
        """Decodes your encoded data to tree.
        """
        if data == self.NULL:
            return None

        val, length, children = data.split(',', 2)
        val, length = int(val), int(length)
        l, r = self.deserialize(children[:length]), self.deserialize(children[length:])

        tree = TreeNode(val)
        tree.left = l
        tree.right = r
        return tree