本文实例讲述了Python实现的序列化和反序列化二叉树算法。分享给大家供大家参考,具体如下:
题目描述
请实现两个函数,分别用来序列化和反序列化二叉树
序列化二叉树
先序遍历二叉树
1
2
3
4
5
6
7
8
9
10
11
|
def recursionSerialize( self , root):
series = ''
if root = = None :
series + = ',$'
else :
series + = ( ',' + str (root.val))
series + = self .recursionSerialize(root.left)
series + = self .recursionSerialize(root.right)
return series
def Serialize( self , root):
return self .recursionSerialize(root)[ 1 :]
|
结果:
1
2
3
4
5
6
|
root = TreeNode( 11 )
root.left = TreeNode( 2 )
root.right = TreeNode( 3 )
series = Solution().Serialize(root)
print (series)
>>> 11 , 2 ,$,$, 3 ,$,$
|
反序列化
先构建根节点,然后左节点,右节点,同样是递归
注意由于使用的是字符串的表示形式,可以先转化为list,
1
2
|
print (series.split( ',' ))
>>>[ '11' , '2' , '$' , '$' , '3' , '$' , '$' ]
|
然后再处理就不需要将大于10的数字转换过来了:
1
2
3
4
5
6
|
def getValue( self , s, sIndex): #处理超过10的数字,将数字字符转变为数字
val = 0
while ord (s[sIndex]) < = ord ( '9' ) and ord (s[sIndex]) > = ord ( '0' ):
val = val * 10 + int (s[sIndex])
sIndex + = 1
return val, sIndex - 1
|
下面是反序列化的递归函数:
1
2
3
4
5
6
7
8
9
10
11
12
13
|
def Deserialize( self , s):
if self .sIndex < len (s):
if s[ self .sIndex] = = ',' :
self .sIndex + = 1
if s[ self .sIndex] = = '$' :
return None
val, self .sIndex = self .getValue(s, self .sIndex)
treeNode = TreeNode(val)
self .sIndex + = 1
treeNode.left = self .Deserialize(s)
self .sIndex + = 1
treeNode.right = self .Deserialize(s)
return treeNode
|
完整解法
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
|
class TreeNode:
def __init__( self , x):
self .val = x
self .left = None
self .right = None
class Solution:
def __init__( self ):
self .sIndex = 0
def recursionSerialize( self , root):
series = ''
if root = = None :
series + = ',$'
else :
series + = ( ',' + str (root.val))
series + = self .recursionSerialize(root.left)
series + = self .recursionSerialize(root.right)
return series
def Serialize( self , root):
return self .recursionSerialize(root)[ 1 :]
def getValue( self , s, sIndex): #处理超过10的数字,将数字字符转变为数字
val = 0
while ord (s[sIndex]) < = ord ( '9' ) and ord (s[sIndex]) > = ord ( '0' ):
val = val * 10 + int (s[sIndex])
sIndex + = 1
return val, sIndex - 1
def Deserialize( self , s):
if self .sIndex < len (s):
if s[ self .sIndex] = = ',' :
self .sIndex + = 1
if s[ self .sIndex] = = '$' :
return None
val, self .sIndex = self .getValue(s, self .sIndex)
treeNode = TreeNode(val)
self .sIndex + = 1
treeNode.left = self .Deserialize(s)
self .sIndex + = 1
treeNode.right = self .Deserialize(s)
return treeNode
|
希望本文所述对大家Python程序设计有所帮助。
原文链接:https://blog.csdn.net/weixin_36372879/article/details/84308428