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压缩解压缩zip文件及破解zip文件密码的方法
Nov 04 Python
python常用知识梳理(必看篇)
Mar 23 Python
python实现微信远程控制电脑
Feb 22 Python
用Python一键搭建Http服务器的方法
Jun 01 Python
python 3调用百度OCR API实现剪贴板文字识别
Sep 04 Python
python判断输入日期为第几天的实例
Nov 13 Python
对Python的交互模式和直接运行.py文件的区别详解
Jun 29 Python
Pycharm debug调试时带参数过程解析
Feb 03 Python
Python实现队列的方法示例小结【数组,链表】
Feb 22 Python
使用opencv中匹配点对的坐标提取方式
Jun 04 Python
python学习笔记之多进程
Aug 06 Python
Django使用django-simple-captcha做验证码的实现示例
Jan 07 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无限分类且支持输出树状图的详细介绍
2013/06/19 PHP
php中的ini配置原理详解
2014/10/14 PHP
通过php添加xml文档内容的方法
2015/01/23 PHP
PHP自定义序列化接口Serializable用法分析
2017/12/29 PHP
java解析json方法总结
2019/05/16 PHP
Yii框架操作cookie与session的方法实例详解
2019/09/04 PHP
js 目录列举函数
2008/11/06 Javascript
javascript下4个跨浏览器必备的函数
2010/03/07 Javascript
js监听鼠标点击和键盘点击事件并自动跳转页面
2014/09/24 Javascript
如何改进javascript代码的性能
2015/04/02 Javascript
页面内容排序插件jSort使用方法
2015/10/10 Javascript
正则表达式优化JSON字符串的技巧
2015/12/24 Javascript
Bootstrap响应式表格详解
2017/05/23 Javascript
ZeroClipboard.js使用一个flash复制多个文本框
2017/06/19 Javascript
JS去掉字符串末尾的标点符号及删除最后一个字符的方法
2017/10/24 Javascript
vue init失败简单解决方法(终极版)
2017/12/22 Javascript
JS实现在文本指定位置插入内容的简单示例
2017/12/22 Javascript
vue同步父子组件和异步父子组件的生命周期顺序问题
2018/10/07 Javascript
TypeScript基础入门教程之三重斜线指令详解
2018/10/22 Javascript
如何根据业务封装自己的功能组件
2019/04/19 Javascript
ES6基础之数组和对象的拓展实例详解
2019/08/22 Javascript
详解Nuxt.js中使用Element-UI填坑
2019/09/06 Javascript
JS三级联动代码格式实例详解
2019/12/30 Javascript
python算法学习之桶排序算法实例(分块排序)
2013/12/18 Python
Python基于回溯法子集树模板解决0-1背包问题实例
2017/09/02 Python
PyCharm的设置方法和第一个Python程序的建立
2019/01/16 Python
Python实现计算字符串中出现次数最多的字符示例
2019/01/21 Python
Python应用领域和就业形势分析总结
2019/05/14 Python
大学学习计划书范文
2014/05/02 职场文书
企业文明单位申报材料
2014/05/16 职场文书
以幸福为主题的活动方案
2014/08/22 职场文书
软件测试专业推荐信
2014/09/18 职场文书
总经理助理岗位职责
2015/01/31 职场文书
护士自荐信范文
2015/03/25 职场文书
公司行政管理制度范本
2015/08/05 职场文书
使用ORM新增数据在Mysql中的操作步骤
2021/07/26 MySQL