欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

 更新時間:2019年03月02日 11:57:55   作者:hustfc  
這篇文章主要介紹了Python實現(xiàn)的序列化和反序列化二叉樹算法,結(jié)合實例形式分析了Python二叉樹的構(gòu)造、遍歷、序列化、反序列化等相關(guā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ǔ)用法詳解

    這篇文章主要為大家詳細介紹了python鏈表的基礎(chǔ)概念和基礎(chǔ)用法,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-05-05
  • Python+Tkinter實現(xiàn)經(jīng)典井字棋小游戲

    Python+Tkinter實現(xiàn)經(jīng)典井字棋小游戲

    Tkinter是內(nèi)置到Python安裝包中的,只要安裝好Python之后就能import?Tkinter,而且IDLE也是用Tkinter編寫而成的。本文將用Tkinter編寫經(jīng)典的井字棋小游戲,需要的可以參考一下
    2022-03-03
  • 2行Python實現(xiàn)給圖片加水印效果

    2行Python實現(xiàn)給圖片加水印效果

    這篇文章主要給大家介紹了如何通過2行Python實現(xiàn)給圖片加水印效果的相關(guān)資料,實現(xiàn)的方法主要是利用filestools庫,文中還介紹了一行代碼如何給圖片加水印,需要的朋友可以參考下
    2021-10-10
  • 如何讓python的運行速度得到提升

    如何讓python的運行速度得到提升

    在本篇文章里小編給大家分享了關(guān)于如何讓python的運行速度得到提升的方法和技巧,需要的朋友們可以學習下。
    2020-07-07
  • python獲取url的返回信息方法

    python獲取url的返回信息方法

    今天小編就為大家分享一篇python獲取url的返回信息方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-12-12
  • python算法測試結(jié)果自動保存到excel表格的實現(xiàn)步驟

    python算法測試結(jié)果自動保存到excel表格的實現(xiàn)步驟

    我們在進行算法評估是通常會針對每個樣本的算法處理結(jié)果進行統(tǒng)計,例如每個樣本正確預測數(shù)量、漏檢數(shù)量和誤檢數(shù)量、精度等,本文小編將給大家介紹python算法測試結(jié)果自動保存到excel表格的實現(xiàn)步驟,感興趣的朋友可以參考下
    2023-12-12
  • Python中的json內(nèi)置庫詳解

    Python中的json內(nèi)置庫詳解

    這篇文章主要介紹了Python中的json內(nèi)置庫詳解,在學習做自動化測試的過程中,python 里有一個內(nèi)置的 json 庫,必須要學習好,json 是用于存儲和交換數(shù)據(jù)的語法,是一種輕量級的數(shù)據(jù)交換式使用場景,需要的朋友可以參考下
    2023-08-08
  • 詳解Python設(shè)計模式之策略模式

    詳解Python設(shè)計模式之策略模式

    這篇文章主要介紹了Python設(shè)計模式之策略模式的相關(guān)知識,文中講解非常詳細,代碼幫助大家更好的理解和學習,感興趣的朋友可以了解下
    2020-06-06
  • 簡析Python的閉包和裝飾器

    簡析Python的閉包和裝飾器

    這篇文章主要為大家詳細介紹了Python的閉包和裝飾器,何為閉包?何為裝飾器?感興趣的小伙伴們可以參考一下
    2016-02-02
  • Python嵌套函數(shù)與nonlocal使用詳細介紹

    Python嵌套函數(shù)與nonlocal使用詳細介紹

    這篇文章主要介紹了Python嵌套函數(shù)與nonlocal使用,nonlocal關(guān)鍵字與global關(guān)鍵字有點相似,可以對比著理解。nonlocal關(guān)鍵字只能作用域局部變量,且始終找離當前最近的上層局部作用域中的變量
    2022-09-09

最新評論