Python實現的序列化和反序列化二叉樹演算法示例

2022-09-27 03:03:15 字數 2748 閱讀 1579

題目描述

請實現兩個函式,分別用來序列化和反序列化二叉樹

序列化二叉樹

先序遍歷二叉樹

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 序列...