Skip to content

Instantly share code, notes, and snippets.

@fredthekid
Created March 10, 2016 23:09
Show Gist options
  • Save fredthekid/eabf8401183e37e753bd to your computer and use it in GitHub Desktop.
Save fredthekid/eabf8401183e37e753bd to your computer and use it in GitHub Desktop.
from collections import deque
# 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
"""
nodes = deque([])
node_string = ""
nodes.append(root)
while nodes:
currNode = nodes.popleft()
if currNode:
node_string += str(currNode.val)
node_string += ','
nodes.append(currNode.left)
nodes.append(currNode.right)
else:
node_string += str(None)
node_string += ','
print ("Done")
return node_string[:-1]
def deserialize(self, data):
"""Decodes your encoded data to tree.
:type data: str
:rtype: TreeNode
"""
node_list = data.split(',')
if not node_list:
return None
if node_list[0] == "None":
return None
n = 0
count = 0
root = TreeNode(int(node_list[0]))
nodes = deque([])
nodes.append(root)
while nodes:
curr_node = nodes.popleft()
if curr_node is None:
n += 1
continue
left = 2*n + 1
if left < len(node_list):
if node_list[left] != "None":
left_node = TreeNode(int(node_list[left]))
curr_node.left = left_node
nodes.append(left_node)
else:
curr_node.left = None
nodes.append(None)
right = 2*n + 2
if left < len(node_list):
if node_list[right] != "None":
right_node = TreeNode(int(node_list[right]))
curr_node.right = right_node
nodes.append(right_node)
else:
curr_node.right = None
nodes.append(None)
n += 1
return root
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment