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的汉字转GBK码实现代码
Feb 19 Python
Python运用于数据分析的简单教程
Mar 27 Python
Window10+Python3.5安装opencv的教程推荐
Apr 02 Python
Python Flask 搭建微信小程序后台详解
May 06 Python
Python+OpenCV+pyQt5录制双目摄像头视频的实例
Jun 28 Python
树莓派使用python-librtmp实现rtmp推流h264的方法
Jul 22 Python
tensorflow实现测试时读取任意指定的check point的网络参数
Jan 21 Python
使用python-pptx包批量修改ppt格式的实现
Feb 14 Python
Python第三方包之DingDingBot钉钉机器人
Apr 09 Python
解决keras使用cov1D函数的输入问题
Jun 29 Python
一篇文章教你用python画动态爱心表白
Nov 22 Python
Python文件名匹配与文件复制的实现
Dec 11 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来限制每个ip每天浏览页面数量的实现思路
2015/02/24 PHP
CI框架表单验证实例详解
2016/11/21 PHP
Laravel框架使用Seeder实现自动填充数据功能
2018/06/13 PHP
PHP实现负载均衡session共享redis缓存操作示例
2018/08/22 PHP
javascript 日历提醒系统( 兼容所有浏览器 )
2009/04/07 Javascript
jquery ready()的几种实现方法小结
2010/06/18 Javascript
在IE和VB中支持png图片透明效果的实现方法(vb源码打包)
2011/04/01 Javascript
网页运行时提示对象不支持abigimage属性或方法
2014/08/10 Javascript
node.js中的fs.lchown方法使用说明
2014/12/16 Javascript
JavaScript中的anchor()方法使用详解
2015/06/08 Javascript
Javascript发送AJAX请求实例代码
2016/08/21 Javascript
Json对象和字符串互相转换json数据拼接和JSON使用方式详细介绍(小结)
2016/10/25 Javascript
BootStrop前端框架入门教程详解
2016/12/25 Javascript
JavaScript 过滤关键字
2017/03/20 Javascript
jQuery.ajax向后台传递数组问题的解决方法
2017/05/12 jQuery
Vue用v-for给src属性赋值的方法
2018/03/03 Javascript
Vue+Mock.js模拟登录和表格的增删改查功能
2018/07/26 Javascript
在Vant的基础上实现添加表单验证框架的方法示例
2018/12/05 Javascript
详解JS取出两个数组中的不同或相同元素
2019/03/20 Javascript
Layui事件监听的实现(表单和数据表格)
2019/10/17 Javascript
js仿360开机效果
2019/12/26 Javascript
vue+canvas实现拼图小游戏
2020/09/18 Javascript
在Python程序中实现分布式进程的教程
2015/04/28 Python
Python实现登录接口的示例代码
2017/07/21 Python
K-近邻算法的python实现代码分享
2017/12/09 Python
pycharm 主题theme设置调整仿sublime的方法
2018/05/23 Python
Linux下多个Python版本安装教程
2018/08/15 Python
Django项目使用CircleCI的方法示例
2019/07/14 Python
Python如何避免文件同名产生覆盖
2020/06/09 Python
利用简洁的图片预加载组件提升html5移动页面的用户体验
2016/03/11 HTML / CSS
干部培训自我鉴定
2014/01/22 职场文书
需求分析说明书
2014/05/09 职场文书
2014年城管个人工作总结
2014/12/08 职场文书
青年文明号汇报材料
2014/12/23 职场文书
Z-Order加速Hudi大规模数据集方案分析
2022/03/31 Servers
星际争霸 Light vs Action 一场把教主看到鬼畜的比赛
2022/04/01 星际争霸