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之集合(set)
Sep 24 Python
Python处理json字符串转化为字典的简单实现
Jul 07 Python
Python连接SQLServer2000的方法详解
Apr 19 Python
Django中的文件的上传的几种方式
Jul 23 Python
浅谈pytorch和Numpy的区别以及相互转换方法
Jul 26 Python
Python中GeoJson和bokeh-1的使用讲解
Jan 03 Python
python学生管理系统开发
Jan 30 Python
Python异步操作MySQL示例【使用aiomysql】
May 16 Python
python matplotlib库直方图绘制详解
Aug 10 Python
使用Python函数进行模块化的实现
Nov 15 Python
Python爬虫实现模拟点击动态页面
Mar 05 Python
Python过滤序列元素的方法
Jul 31 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中Date获取时间不正确怎么办
2008/06/05 PHP
PHP关于IE下的iframe跨域导致session丢失问题解决方法
2013/10/10 PHP
php生成高清缩略图实例详解
2015/12/07 PHP
AJAX使用了UpdatePanel后无法使用alert弹出脚本
2010/04/02 Javascript
jQuery操作input值的各种方法总结
2013/11/21 Javascript
IE浏览器中图片onload事件无效的解决方法
2014/04/29 Javascript
一个不错的字符串转码解码函数(自写)
2014/07/31 Javascript
jQuery移除tr无效的解决方法(tr是动态添加)
2014/09/22 Javascript
JavaScript设计模式之代理模式介绍
2014/12/28 Javascript
JQuery复制DOM节点的方法
2015/06/11 Javascript
JavaScript函数参数的传递方式详解
2017/03/06 Javascript
详解angularjs实现echart图表效果最简洁教程
2017/11/29 Javascript
js自定义trim函数实现删除两端空格功能
2018/02/09 Javascript
Vue仿支付宝支付功能
2018/05/25 Javascript
Angularjs之ngModel中的值验证绑定方法
2018/09/13 Javascript
使用SAE部署Python运行环境的教程
2015/05/05 Python
Python中每次处理一个字符的5种方法
2015/05/21 Python
Python缩进和冒号详解
2016/06/01 Python
numpy使用技巧之数组过滤实例代码
2018/02/03 Python
mac安装pytorch及系统的numpy更新方法
2018/07/26 Python
python 求一个列表中所有元素的乘积实例
2019/06/11 Python
使用ITK-SNAP进行抠图操作并保存mask的实例
2020/07/01 Python
html5视频常用API接口的实战示例
2020/03/20 HTML / CSS
Top Villas美国:豪华别墅出租和度假屋
2018/07/10 全球购物
英国最大的在线时尚眼镜店:Eyewearbrands
2019/03/12 全球购物
美国正宗设计师眼镜在线零售商:EYEZZ
2019/03/23 全球购物
Linux不知道文件后缀名怎么判断文件类型
2012/04/26 面试题
酒店个人培训自我鉴定
2013/12/11 职场文书
高三自我评价
2014/02/01 职场文书
大家检讨书5000字
2014/02/03 职场文书
旷课检讨书3000字
2014/02/04 职场文书
公司开业庆典主持词
2014/03/21 职场文书
刑事附带民事代理词
2015/05/25 职场文书
nginx proxy_cache 缓存配置详解
2021/03/31 Servers
Java版 单机五子棋
2022/05/04 Java/Android
正则表达式基础与常用验证表达式
2022/06/16 Javascript