題目描述
請實現兩個函式,分別用來序列化和反序列化二叉樹
序列化二叉樹
先序遍歷二叉樹
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:]
結果:root = treenode(11)
root.left = treenode(2)
root.right = treenode(3)
series = solution().serialize(root)
print(se程式設計客棧ries)
>>>11,2,$,$,3,$,$
反序列化
先構建根節點,然後左節點,右節點,同樣是遞迴
注意由於使用的是字串的表示形式,可以先轉化為list,
print(series.split(','))
>>>['11', '2', '$', '$', '3', '$', '$']
然後再處理就不需要將大於10的數字轉換過來了:
def getvalue(self, s, sindex): #處理超過10的數字,將數字字元轉變為數字
val = 0
while ord(s[sindex]) <= orwww.cppcns.comd(osapzgtkq'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
完整解法
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.recursionseria程式設計客棧lize(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 序列化和反序列化
在spark中使用廣播變數時,選擇合適的序列化格式是非常重要的。這裡重點講的是python中的序列化。1.序列化和反序列化 序列化就是把資料變成可儲存或可傳輸的過程的,只有序列化後的資料才可以寫入到磁碟或者通過網路傳輸到spark集群的其他節點上。反序列化則相反,反序列就是把序列化的變數重新轉到記憶...
python序列化和反序列化
序列化和反序列化 程式執行的過程中,所有變數都是在記憶體中操作的,當程式一旦執行完畢,結束退出後,變數占有的記憶體就被作業系統 了。因此我們需要將某些資料持久化儲存到磁碟中,下次執行的時候從磁碟中讀取相關資料。我們將變數從記憶體中變成可以儲存或傳輸的過程稱之為序列化,在python中叫做pickli...
python 序列化和反序列化
import json print json.all 可以列印出json的所有方法 dict1 print 初始狀態 dict1 print type dict1 將python編碼轉化為json字串 str1 json.dumps dict1,ensure ascii false print 序列...