说明:
二叉树被记录成文件的过程叫作二叉树的序列化,通过文件内容重建原来二叉树的过程叫作二叉树的反序列化
#二叉树的序列化和反序列化(先序)
def serialByPre(root):
if not root:
return '#!'
res = root.val + '!'
res += serialByPre(root.left)
res += serialByPre(root.right)
return res
def reconByPreString(preStr):
def reconPreOrder(values):
key = values.pop(0)
if key == '#':
return None
root = TreeNode(key)
root.left = reconPreOrder(values)
root.right = reconPreOrder(values)
return root
values = preStr.split('!')
return reconPreOrder(values)
#二叉树的序列化和反序列化(层次)
def serialByLevel(root):
if root == '#':
return '#!'
stack = []
stack.append(root)
res = root.val + '!'
while stack:
root = stack.pop()
if root.left:
res += root.left.val + '!'
stack.append(root.left)
else:
res += '#!'
if root.right:
res += root.right.val + '!'
stack.append(root.right)
else:
res += '#!'
return res
def reconByLevelString(levStr):
def generateNode(key):
if key == '#':
return None
return TreeNode(key)
values = levStr.split('!')
head = generateNode(values.pop(0))
queue = []
if head:
queue.append(head)
while queue:
root = queue.pop(0)
root.left = generateNode(values.pop(0))
root.right = generateNode(values.pop(0))
if root.left:
queue.append(root.left)
if root.right:
queue.append(root.right)
return head