Python實現(xiàn)的序列化和反序列化二叉樹算法示例
本文實例講述了Python實現(xiàn)的序列化和反序列化二叉樹算法。分享給大家供大家參考,具體如下:
題目描述
請實現(xiàn)兩個函數(shù),分別用來序列化和反序列化二叉樹
序列化二叉樹
先序遍歷二叉樹
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:]
結(jié)果:
root = TreeNode(11) root.left = TreeNode(2) root.right = TreeNode(3) series = Solution().Serialize(root) print(series) >>>11,2,$,$,3,$,$
反序列化
先構(gòu)建根節(jié)點,然后左節(jié)點,右節(jié)點,同樣是遞歸
注意由于使用的是字符串的表示形式,可以先轉(zhuǎn)化為list,
print(series.split(',')) >>>['11', '2', '$', '$', '3', '$', '$']
然后再處理就不需要將大于10的數(shù)字轉(zhuǎn)換過來了:
def getValue(self, s, sIndex): #處理超過10的數(shù)字,將數(shù)字字符轉(zhuǎn)變?yōu)閿?shù)字 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
下面是反序列化的遞歸函數(shù):
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.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的數(shù)字,將數(shù)字字符轉(zhuǎn)變?yōu)閿?shù)字 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
更多關(guān)于Python相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《Python數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Python加密解密算法與技巧總結(jié)》、《Python編碼操作技巧總結(jié)》、《Python函數(shù)使用技巧總結(jié)》、《Python字符串操作技巧匯總》及《Python入門與進階經(jīng)典教程》
希望本文所述對大家Python程序設(shè)計有所幫助。
相關(guān)文章
python鏈表的基礎(chǔ)概念和基礎(chǔ)用法詳解
這篇文章主要為大家詳細介紹了python鏈表的基礎(chǔ)概念和基礎(chǔ)用法,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-05-05Python+Tkinter實現(xiàn)經(jīng)典井字棋小游戲
Tkinter是內(nèi)置到Python安裝包中的,只要安裝好Python之后就能import?Tkinter,而且IDLE也是用Tkinter編寫而成的。本文將用Tkinter編寫經(jīng)典的井字棋小游戲,需要的可以參考一下2022-03-03python算法測試結(jié)果自動保存到excel表格的實現(xiàn)步驟
我們在進行算法評估是通常會針對每個樣本的算法處理結(jié)果進行統(tǒng)計,例如每個樣本正確預測數(shù)量、漏檢數(shù)量和誤檢數(shù)量、精度等,本文小編將給大家介紹python算法測試結(jié)果自動保存到excel表格的實現(xiàn)步驟,感興趣的朋友可以參考下2023-12-12Python嵌套函數(shù)與nonlocal使用詳細介紹
這篇文章主要介紹了Python嵌套函數(shù)與nonlocal使用,nonlocal關(guān)鍵字與global關(guān)鍵字有點相似,可以對比著理解。nonlocal關(guān)鍵字只能作用域局部變量,且始終找離當前最近的上層局部作用域中的變量2022-09-09