本文實例講述了Python實現的序列化和反序列化二叉樹算法。分享給大家供大家參考,具體如下:
題目描述
請實現兩個函數,分別用來序列化和反序列化二叉樹
序列化二叉樹
先序遍歷二叉樹
  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(series)>>>11,2,$,$,3,$,$
反序列化
先構建根節點,然后左節點,右節點,同樣是遞歸
注意由于使用的是字符串的表示形式,可以先轉化為list,
print(series.split(','))>>>['11', '2', '$', '$', '3', '$', '$']然后再處理就不需要將大于10的數字轉換過來了:
  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
完整解法
class TreeNode:  def __init__(self, x):    self.val = x    self.left = None    self.right = Noneclass 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            
新聞熱點
疑難解答