请实现两个函数,分别用来序列化和反序列化二叉树。
序列化二叉树:把一棵二叉树按照某种遍历方式的结果以某种格式保存为字符串。需要注意的是,序列化二叉树的过程中,如果遇到空节点,需要以某种符号(这里用#)表示。
二叉树的反序列化是指:根据某种遍历顺序得到的序列化字符串结果str,重构二叉树。
先序序列化结果重构二叉树:分割二叉树的序列化字符串,遍历nodes数组建立二叉树,如果当前遍历元素非 # 则作为一个结点插入树中作为上一结点的左儿子,当前遍历元素为 # 则表示此子树已结束,遍历下一元素作为上一结点的右儿子。
解题思路
class Solution:
def Serialize(self
, root
):
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
):
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
()