Python实现的序列化和反序列化二叉树算法示例


Posted in Python onMarch 02, 2019

本文实例讲述了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 = 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的数字,将数字字符转变为数字
    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

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
python通过邮件服务器端口发送邮件的方法
Apr 30 Python
python使用matplotlib绘制柱状图教程
Feb 08 Python
Python 装饰器使用详解
Jul 29 Python
django使用html模板减少代码代码解析
Dec 12 Python
python读取LMDB中图像的方法
Jul 02 Python
计算机二级python学习教程(3) python语言基本数据类型
May 16 Python
Python Process多进程实现过程
Oct 22 Python
python二分法查找算法实现方法【递归与非递归】
Dec 06 Python
不到20行实现Python代码即可制作精美证件照
Apr 24 Python
numpy 矩阵形状调整:拉伸、变成一位数组的实例
Jun 18 Python
pytorch 限制GPU使用效率详解(计算效率)
Jun 27 Python
python3美化表格数据输出结果的实现代码
Apr 14 Python
Python求一批字符串的最长公共前缀算法示例
Mar 02 #Python
Python实现判断一个整数是否为回文数算法示例
Mar 02 #Python
python实现转圈打印矩阵
Mar 02 #Python
python实现顺时针打印矩阵
Mar 02 #Python
python实现二维数组的对角线遍历
Mar 02 #Python
python实现矩阵打印
Mar 02 #Python
python实现杨氏矩阵查找
Mar 02 #Python
You might like
PHP 字符串编码截取函数(兼容utf-8和gb2312)
2009/05/02 PHP
PHP的变量总结 新手推荐
2011/04/18 PHP
PHP 读取大文件的X行到Y行内容的实现代码
2013/06/24 PHP
基于php常用函数总结(数组,字符串,时间,文件操作)
2013/06/27 PHP
js中parseFloat(参数1,参数2)定义和用法及注意事项
2013/01/27 Javascript
使用GruntJS构建Web程序之安装篇
2014/06/04 Javascript
js识别不同浏览器基于userAgent做判断
2014/07/29 Javascript
BootStrap中Datetimepicker和uploadify插件应用实例小结
2016/05/26 Javascript
AngularJS使用带属性值的ng-app指令实现自定义模块自动加载的方法
2017/01/04 Javascript
Bootstrap实现提示框和弹出框效果
2017/01/11 Javascript
微信小程序 简单教程实例详解
2017/01/13 Javascript
JavaScript+Canvas实现彩色图片转换成黑白图片的方法分析
2018/07/31 Javascript
Vue源码解读之Component组件注册的实现
2018/08/24 Javascript
webpack4从0搭建组件库的实现
2020/11/29 Javascript
[52:12]FNATIC vs Infamous 2019国际邀请赛小组赛 BO2 第一场 8.16
2019/08/19 DOTA
[01:02:54]完美世界DOTA2联赛PWL S2 FTD vs GXR 第一场 11.22
2020/11/26 DOTA
python实现斐波那契递归函数的方法
2014/09/08 Python
Python登录并获取CSDN博客所有文章列表代码实例
2017/12/28 Python
浅谈PyQt5 的帮助文档查找方法,可以查看每个类的方法
2019/06/25 Python
浅析Windows 嵌入python解释器的过程
2019/07/26 Python
django将网络中的图片,保存成model中的ImageField的实例
2019/08/07 Python
python 解决flask uwsgi 获取不到全局变量的问题
2019/12/22 Python
在python中修改.properties文件的操作
2020/04/08 Python
Django正则URL匹配实现流程解析
2020/11/13 Python
Python中正则表达式对单个字符,多个字符和匹配边界等使用
2021/01/27 Python
详解Python中的GIL(全局解释器锁)详解及解决GIL的几种方案
2021/01/29 Python
英语系本科生个人求职信
2013/09/21 职场文书
银行领导证婚词
2014/01/11 职场文书
办公室主任主任岗位责任制
2014/02/11 职场文书
优良学风班申请材料
2014/02/13 职场文书
2014年教师节活动总结
2014/08/29 职场文书
课外访万家心得体会
2014/09/03 职场文书
质量保证书格式模板
2015/02/27 职场文书
大学生就业意向书
2015/05/11 职场文书
2015年暑期见闻
2015/07/14 职场文书
运动会闭幕式致辞
2015/07/29 职场文书