"""
Definition of TreeNode:
class TreeNode:
def __init__(self, val):
self.val = val
self.left, self.right = None, None
"""
class Solution:
def serialize(self, root):
if root == None:
return []
res = [root.val]
temp = []
q = [root]
while q:
length = len(q)
for i in range(length):
if q[0].left == None and q[0].right != None:
q.append(q[0].right)
res.append('#')
res.append(q[0].right.val)
elif q[0].right == None and q[0].left != None:
q.append(q[0].left)
res.append(q[0].left.val)
res.append('#')
elif q[0].left == None and q[0].right == None:
res.append('#')
res.append('#')
else:
q.append(q[0].left)
q.append(q[0].right)
res.append(q[0].left.val)
res.append(q[0].right.val)
del q[0]
for i in range(len(res) - 1, -1, -1):
if res[i] == '#':
del res[i]
else:
break
return res
def deserialize(self, data):
if len(data) == 0:
return None
head = TreeNode(data[0])
self.helper(data, 0, head)
return head
def helper(self, data, index, root):
if index * 2 + 1 < len(data):
root.left = TreeNode(data[index * 2 + 1])
self.helper(data, index * 2 + 1, root.left)
if index * 2 + 2 < len(data):
root.right = TreeNode(data[index * 2 + 2])
self.helper(data, index * 2 + 2, root.right)