序列化是将一个数据结构或者对象转换为连续的比特位的操作,进而可以将转换后的数据存储在一个文件或者内存中,同时也可以通过网络传输到另一个计算机环境,采取相反方式重构得到原数据。
1.需求
请设计一个算法来实现二叉树的序列化与反序列化。这里不限定你的序列 / 反序列化算法执行逻辑,你只需要保证一个二叉树可以被序列化为一个字符串并且将这个字符串反序列化为原始的树结构。
示例:
2.层序遍历解法
- 序列化
- 反序列化
# 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):
"""序列化"""
res = []
q = [root]
while q:
node = q.pop(0)
if node:
res.append(node.val)
q.append(node.left)
q.append(node.right)
else:
res.append(None)
return res # [1, 2, 3, None, None, 4, 5, None, None, None, None]
def deserialize(self, data):
"""
反序列化
"""
if not data:
return None
root = TreeNode(data[0])
queue = [root]
index = 1
while queue:
node = queue.pop(0)
if data[index] is not None:
node.left = TreeNode(data[index])
queue.append(node.left)
if data[index+1] is not None:
node.right = TreeNode(node.right)
queue.append(node.right)
index += 2
return root