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多线程编程(六):可重入锁RLock
Apr 05 Python
用Python编写脚本使IE实现代理上网的教程
Apr 23 Python
python保存字符串到文件的方法
Jul 01 Python
对PyQt5基本窗口控件 QMainWindow的使用详解
Jun 19 Python
Django分页功能的实现代码详解
Jul 29 Python
python中hasattr()、getattr()、setattr()函数的使用
Aug 16 Python
python修改FTP服务器上的文件名
Sep 11 Python
Python模块汇总(常用第三方库)
Oct 07 Python
Pycharm 2020最新永久激活码(附最新激活码和插件)
Sep 17 Python
python使用paramiko实现ssh的功能详解
Mar 06 Python
Django框架配置mysql数据库实现过程
Apr 22 Python
超级详细实用的pycharm常用快捷键
May 12 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基础知识:函数基础知识
2006/12/13 PHP
PHP中文处理 中文字符串截取(mb_substr)和获取中文字符串字数
2011/11/10 PHP
PHP闭包(Closure)使用详解
2013/05/02 PHP
浅谈ThinkPHP的URL重写
2014/11/25 PHP
php实现字符串反转输出的方法
2015/03/14 PHP
php生成高清缩略图实例详解
2015/12/07 PHP
PHP5.6新增加的可变函数参数用法分析
2017/08/25 PHP
php报错502badgateway解决方法
2019/10/11 PHP
在laravel中实现将查询的对象转换为多维数组的函数
2019/10/21 PHP
永不消失的title提示代码
2007/02/15 Javascript
js获取RadioButtonList的Value/Text及选中值等信息实现代码
2013/03/05 Javascript
IE的事件传递-event.cancelBubble示例介绍
2014/01/12 Javascript
Javascript 拖拽雏形(逐行分析代码,让你轻松了拖拽的原理)
2015/01/23 Javascript
JS实现超炫网页烟花动画效果的方法
2015/03/02 Javascript
JS实现弹出居中的模式窗口示例
2016/06/20 Javascript
javascript中的深复制详解及实例分析
2016/12/29 Javascript
fckeditor部署到weblogic出现xml无法读取及样式不能显示问题的解决方法
2017/03/24 Javascript
微信小程序template模板与component组件的区别和使用详解
2019/05/22 Javascript
js实现小星星游戏
2020/03/23 Javascript
JS倒计时两种实现方式代码实例
2020/07/27 Javascript
[59:00]DOTA2-DPC中国联赛 正赛 Ehome vs PSG.LGD BO3 第一场 3月7日
2021/03/11 DOTA
python封装对象实现时间效果
2020/04/23 Python
编写Python脚本来获取mp3文件tag信息的教程
2015/05/04 Python
python从网络读取图片并直接进行处理的方法
2015/05/22 Python
Django Admin实现上传图片校验功能
2016/03/06 Python
python 文件操作删除某行的实例
2017/09/04 Python
python 重定向获取真实url的方法
2018/05/11 Python
Python清空文件并替换内容的实例
2018/10/22 Python
Pytorch修改ResNet模型全连接层进行直接训练实例
2019/09/10 Python
python Manager 之dict KeyError问题的解决
2019/12/21 Python
使用sublime text3搭建Python编辑环境的实现
2021/01/12 Python
css3 给背景设置渐变色的方法
2019/09/12 HTML / CSS
使用HTML5里的classList操作CSS类
2016/06/28 HTML / CSS
综合测评自我鉴定
2013/10/08 职场文书
酒店辞职书怎么写
2015/02/26 职场文书
canvas绘制折线路径动画实现
2021/05/12 Javascript