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

首頁 > 編程 > Python > 正文

Python實(shí)現(xiàn)的序列化和反序列化二叉樹算法示例

2020-01-04 13:34:04
字體:
供稿:網(wǎng)友

本文實(shí)例講述了Python實(shí)現(xiàn)的序列化和反序列化二叉樹算法。分享給大家供大家參考,具體如下:

題目描述

請(qǐng)實(shí)現(xiàn)兩個(gè)函數(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é)點(diǎn),然后左節(jié)點(diǎn),右節(jié)點(diǎn),同樣是遞歸

注意由于使用的是字符串的表示形式,可以先轉(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 = 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的數(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

希望本文所述對(duì)大家Python程序設(shè)計(jì)有所幫助。


注:相關(guān)教程知識(shí)閱讀請(qǐng)移步到python教程頻道。
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 彭水| 岑溪市| 临江市| 晴隆县| 南丰县| 沈阳市| 普兰店市| 湖南省| 永丰县| 乾安县| 宁化县| 高雄县| 和林格尔县| 克山县| 衡南县| 伊春市| 恩平市| 嘉黎县| 青河县| 曲靖市| 安陆市| 阿鲁科尔沁旗| 灌云县| 富顺县| 兴业县| 浙江省| 拉萨市| 水富县| 云浮市| 无锡市| 乐亭县| 宁南县| 荥阳市| 怀化市| 门头沟区| 固原市| 宿松县| 北宁市| 泰宁县| 沂南县| 富民县|