5. Serialize and Deserialize Binary Tree
This is your coding interview problem for today.
This problem was asked by Google.
Given the root to a binary tree, implement serialize(root)
, which serializes the tree into a string, and deserialize(s)
, which deserializes the string back into the tree.
For example, given the following Node
class
class Node:
def __init__(self, val, left=None, right=None):
self.val = val
self.left = left
self.right = right
The following test should pass:
node = Node('root', Node('left', Node('left.left')), Node('right'))
assert deserialize(serialize(node)).left.left.val == 'left.left'
def serialize(node):
def r_serialize(node, string):
if root == None:
string += 'None'
else:
string += str(root.val)
string += str(r_serialize(root.left, string))
string += str(r_serialize(root.right, string))
return string
return r_serialize(node, "")
def deserialize(string):
def r_deserialize(lst):
if lst[0] == 'None':
lst.pop(0)
return None
root = lst[0]
lst.pop(0)
root.left = r_deserialize(lst)
root.right = r_deserialize(lst)
return root
data_list = string.split(',')
return r_deserialize(data_list)
O(N) time and space, since we iterate over the whole tree when serializing and deserializing
def serialize(node):
if node == None:
return "#"
return '{}{}{}'.format(node.val, serialize(node.left), serialize(node.right))
def deserialize(data):
def helper():
# Python next() 函数
val = next(vals)
if val = "#":
return None
node = node(int(val))
node.left = helper()
node.right = helper()
return node
# Python iter() 函数
vals = iter(data.split())
return helper()
Last updated
Was this helpful?