国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

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

2020-02-16 01:27:00
字體:
來源:轉載
供稿:網友

本文實例講述了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            
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 上思县| 玛曲县| 湾仔区| 萝北县| 青海省| 沈阳市| 丹东市| 六安市| 留坝县| 辽阳市| 柞水县| 章丘市| 沐川县| 应用必备| 民乐县| 海门市| 安义县| 泸溪县| 丰顺县| 特克斯县| 图木舒克市| 宁国市| 麦盖提县| 乐山市| 滦南县| 临猗县| 海安县| 岑溪市| 五常市| 永济市| 呼和浩特市| 白山市| 蓬莱市| 昌邑市| 额济纳旗| 廊坊市| 股票| 名山县| 广安市| 健康| 朔州市|