Skip to content

Instantly share code, notes, and snippets.

@ssshukla26
Created November 27, 2021 03:25
Show Gist options
  • Save ssshukla26/ba9c87ee3da5e084c8e06489e947af32 to your computer and use it in GitHub Desktop.
Save ssshukla26/ba9c87ee3da5e084c8e06489e947af32 to your computer and use it in GitHub Desktop.
Serialize and Deserialize Binary Tree [LeetCode 297]
# 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
"""
encode = []
def traverseTree(curr: TreeNode):
if curr:
encode.append(str(curr.val))
traverseTree(curr.left)
traverseTree(curr.right)
else:
encode.append("X")
traverseTree(root)
return ",".join(encode)
def deserialize(self, data):
"""Decodes your encoded data to tree.
:type data: str
:rtype: TreeNode
"""
data = data.split(",")
def makeTree(idx):
node = TreeNode(int(data[idx])) if data[idx] != "X" else None
if node:
node.left, idx = makeTree(idx+1)
node.right, idx = makeTree(idx+1)
return node, idx
return makeTree(0)[0]
# Your Codec object will be instantiated and called as such:
# ser = Codec()
# deser = Codec()
# ans = deser.deserialize(ser.serialize(root))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment