Skip to content

Instantly share code, notes, and snippets.

@ssshukla26
Created September 18, 2025 07:35
Show Gist options
  • Save ssshukla26/00ae92c9a7ed1160335a98521063905a to your computer and use it in GitHub Desktop.
Save ssshukla26/00ae92c9a7ed1160335a98521063905a to your computer and use it in GitHub Desktop.
Serialize-Deserialize a BT / BST
# Leetcode : 449
# 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.
"""
data = []
def preorder(node: Optional[TreeNode]):
nonlocal data
# Node -> Left -> Right
data.append(f"{node.val}" if node else "X")
if node:
preorder(node.left)
preorder(node.right)
return
preorder(root)
return ":".join(data)
def deserialize(self, data: str) -> Optional[TreeNode]:
"""
Decodes your encoded data to tree.
"""
data = data.split(":")
n = len(data)
i = 0
def preorder():
nonlocal i
if i < n:
v = data[i]
i = i + 1
if "X" != v:
node = TreeNode(v)
node.left = preorder()
node.right = preorder()
return node
return None
return preorder()
# 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
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment