Skip to main content

297. Serialize and Deserialize Binary Tree

https://leetcode.com/problems/serialize-and-deserialize-binary-tree

Python

class Codec:
EMPTY_CHAR = "-"
def serialize(self, root: TreeNode) -> str:
"""Encodes a tree to a single string.

:type root: TreeNode
:rtype: str
"""

result = self._serialize(root, [])

return " ".join(result) if result else ""

def _serialize(self, node: TreeNode, holder: list) -> list:
if not node:
holder.append(self.EMPTY_CHAR)
return

holder.append(str(node.val))
self._serialize(node.left, holder)
self._serialize(node.right, holder)

return holder


def deserialize(self, data: str) -> TreeNode:
"""Decodes your encoded data to tree.

:type data: str
:rtype: TreeNode
"""
if not data:
return

vals = data.split(' ')[::-1]

return self._deserialize(vals)

def _deserialize(self, vals: list) -> TreeNode:
val = vals.pop()

if val == self.EMPTY_CHAR:
return None

node = TreeNode(int(val))
node.left = self._deserialize(vals)
node.right = self._deserialize(vals)
return node


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