前导知识
序列化与反序列化主要分为两个流派:dfs和bfs;由于二叉树的特殊性,dfs分为前序、中序、后序遍历,但只有前序和后序遍历才可以在线性复杂度下进行反序列化。
序列化
1. dfs
def serialize_dfs(root: TreeNode): # 直接利用递归,在通过三种方式内对二叉树进行序列化
res = {
'pre': '', 'in': '', 'pos': ''} # 中序遍历无法反序列化,此处仅作补足
def dfs(node: TreeNode):
if node is None:
res['pre'] += "#," # 空节点标记为 '#'
res['in'] += "#,"
res['pos'] += "#,"
else:
res['pre'] += str(node.v) + "," # 使用 ',' 隔开每个节点
dfs(node.left)
res['in']