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如何使用AIML搭建聊天机器人
Jan 27 Python
使用Python脚本实现批量网站存活检测遇到问题及解决方法
Oct 11 Python
Python中enumerate函数代码解析
Oct 31 Python
python中实现精确的浮点数运算详解
Nov 02 Python
十个Python练手的实战项目,学会这些Python就基本没问题了(推荐)
Apr 26 Python
Python之修改图片像素值的方法
Jul 03 Python
Python TKinter如何自动关闭主窗口
Feb 26 Python
django表单中的按钮获取数据的实例分析
Jul 31 Python
Python根据字符串调用函数过程解析
Nov 05 Python
写一个Python脚本自动爬取Bilibili小视频
Apr 24 Python
python树莓派通过队列实现进程交互的程序分析
Jul 04 Python
python如何查找列表中元素的位置
May 30 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的Reflection反射机制
2014/08/05 PHP
微信公众平台开发-微信服务器IP接口实例(含源码)
2017/03/05 PHP
php PDO属性设置与操作方法分析
2018/12/27 PHP
window.location.reload()方法刷新页面弹出要再次显示该网页对话框
2013/04/24 Javascript
JavaScript中的函数的两种定义方式和函数变量赋值
2014/05/12 Javascript
javascript操作表格排序实例分析
2015/05/06 Javascript
jQuery+Ajax+PHP弹出层异步登录效果(附源码下载)
2016/05/27 Javascript
JavaScript数组的5种迭代方法
2017/09/29 Javascript
React styled-components设置组件属性的方法
2018/08/07 Javascript
详解vue数组遍历方法forEach和map的原理解析和实际应用
2018/11/15 Javascript
在Vue项目中使用snapshot测试的具体使用
2019/04/16 Javascript
基于Vue el-autocomplete 实现类似百度搜索框功能
2019/10/25 Javascript
Vue 通过公共字段,拼接两个对象数组的实例
2019/11/07 Javascript
微信小程序canvas截取任意形状的实现代码
2020/01/13 Javascript
详细讲解Python中的文件I/O操作
2015/05/24 Python
学习Python selenium自动化网页抓取器
2018/01/20 Python
对numpy和pandas中数组的合并和拆分详解
2018/04/11 Python
对pycharm代码整体左移和右移缩进快捷键的介绍
2018/07/16 Python
Flask框架中request、请求钩子、上下文用法分析
2019/07/23 Python
使用Python爬虫库requests发送表单数据和JSON数据
2020/01/25 Python
opencv python如何实现图像二值化
2020/02/03 Python
python GUI库图形界面开发之PyQt5信号与槽的高级使用技巧(自定义信号与槽)详解与实例
2020/03/06 Python
python 装饰器重要在哪
2021/02/14 Python
Stuart Weitzman美国官网:美国奢华鞋履品牌
2016/08/18 全球购物
The Hut德国站点:时装、家居用品、美容等
2016/09/23 全球购物
英国轻奢珠宝品牌:Astley Clarke
2016/12/18 全球购物
入党申请人的自我鉴定
2013/12/01 职场文书
《和我们一样享受春天》教学反思
2014/02/07 职场文书
测绘专业大学生职业生涯规划书
2014/02/10 职场文书
乡镇干部先进性教育活动个人整改措施
2014/09/16 职场文书
医院领导班子四风对照检查材料
2014/09/27 职场文书
父亲节寄语大全
2015/02/27 职场文书
2015年暑期实践报告范文
2015/07/13 职场文书
大学生奶茶店创业计划书
2019/06/25 职场文书
PySwarms(Python粒子群优化工具包)的使用:GlobalBestPSO例子解析
2021/04/05 Python
MongoDB支持的索引类型
2022/04/11 MongoDB