题目描述
请实现两个函数,分别用来序列化和反序列化二叉树
思路
序列化时:先根序遍历,None要用特殊符号‘#’表示,否则不能反序列化。例如,如下图所示的二叉树序列化为1,2,4,#,#,5,7,#,#,#,3,#,6,#,#
反序列化时:还是利用先序遍历,碰到‘#’返回None。
# -# -*- coding:utf-8 -*-
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution:
def Serialize(self, root):
if not root:
return '#'
return str(root.val) + ',' + self.Serialize(root.left)\
+ ',' + self.Serialize(root.right)
def Deserialize(self, s):
s = s.split(',')
return self.deserialize(s)
def deserialize(self, s):
root = None
nodeVal = s.pop(0)
if nodeVal != '#':
root = TreeNode(int(nodeVal))
root.left = self.deserialize(s)
#python的list是可更改的,在递归中更改后的list互相影响
root.right = self.deserialize(s)
return root #当nodeVal=='#'时返回的是None