请实现两个函数,分别用来序列化和反序列化二叉树。
序列化二叉树:把一棵二叉树按照某种遍历方式的结果以某种格式保存为字符串。需要注意的是,序列化二叉树的过程中,如果遇到空节点,需要以某种符号(这里用#)表示。
二叉树的反序列化是指:根据某种遍历顺序得到的序列化字符串结果str,重构二叉树。
先序序列化结果重构二叉树:分割二叉树的序列化字符串,遍历nodes数组建立二叉树,如果当前遍历元素非 # 则作为一个结点插入树中作为上一结点的左儿子,当前遍历元素为 # 则表示此子树已结束,遍历下一元素作为上一结点的右儿子。
解题思路
# -*- coding:utf-8 -*-
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution:
def Serialize(self, root):
# write code here
vallist = []
def preOrder(root):
if not root:
vallist.append('#')
else:
vallist.append(str(root.val))
preOrder(root.left)
preOrder(root.right)
preOrder(root)
return ' '.join(vallist)
def Deserialize(self, s):
# write code here
vallist = [val for val in s.split()]
# 利用分隔好的字符串生成的数组生成列表
def dePre():
if vallist:
val = vallist.pop(0)
if val == "#":
return None
node = TreeNode(int(val))
node.left = dePre()
node.right = dePre()
return node
return dePre()