这个咋一看是很吓人的,什么序列化,反序列化.
其核心就是转化成一种数据类型(如字符串,列表等)并且可以唯一标识当前树
这里我才用的序列化方法是纯先序遍历,通过_来进行元素的分割
重点是反序列化,他的思想也是递归,这是显而易见的,因为我所需要的数据不包括_所以先对其进行删除,然后先填充左子树,在遇到
理清楚之后,写代码就好写了
'''
这个题目标注的是一个困难题
我听他的讲了一下,发现他的思路并不是很难
可以只通过先序,中序,后序,以及层序遍历中的任意一个来进行序列化和反序列化
但是我也记得,先序遍历+中序遍历可以唯一确定一个二叉树,我觉得也可以用来做
序列化和反序列化.这里先试试只通过先序遍历
'''
class TreeNode(object):
def __init__(self, x):
self.val = x
self.left = None
self.right = None
def xuliehua(root):
if root==None:
return '#_'
res=str(root.val)+"_"
res+=xuliehua(root.left)
res+=xuliehua(root.right)
return res
'''
可以看到序列化的代码是否的简短
'''
def fanxuliehua(root,data):
'''
首先可以知道的是他也是一种递归结构,需要用递归来写
基本结束条件:遇到#
队列结构,不断出队列
:param root:
:return:
'''
duilie=data.split('_')
return digui(duilie)
def digui(duilie):
'''
用来创建树结构
:param x:
:param duilie:
:return:
'''
x=duilie.pop(0)
if x=="#":
return None
x=TreeNode(eval(x))
x.left=digui(duilie)
x.right=digui(duilie)
return x