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字符串的常用操作方法小结
May 21 Python
Python实现代码统计工具(终极篇)
Jul 04 Python
Python如何为图片添加水印
Nov 25 Python
python中numpy的矩阵、多维数组的用法
Feb 05 Python
python中int与str互转方法
Jul 02 Python
使用tensorflow实现线性回归
Sep 08 Python
Opencv+Python 色彩通道拆分及合并的示例
Dec 08 Python
python3 小数位的四舍五入(用两种方法解决round 遇5不进)
Apr 11 Python
python opencv 简单阈值算法的实现
Aug 04 Python
Python批量启动多线程代码实例
Feb 18 Python
keras 获取某层输出 获取复用层的多次输出实例
May 23 Python
python 动态绘制爱心的示例
Sep 27 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
用windows下编译过的eAccelerator for PHP 5.1.6实现php加速的使用方法
2007/09/30 PHP
PHP使用DOMDocument类生成HTML实例(包含常见标签元素)
2014/06/25 PHP
php 魔术方法详解
2014/11/11 PHP
php实现的css文件背景图片下载器代码
2014/11/11 PHP
php中fsockopen用法实例
2015/01/05 PHP
php解析base64数据生成图片的方法
2016/12/06 PHP
在laravel-admin中列表中禁止某行编辑、删除的方法
2019/10/03 PHP
解析javascript 数组以及json元素的添加删除
2013/06/26 Javascript
getJSON调用后台json数据时函数被调用两次的原因猜想
2013/09/29 Javascript
jQuery选择器源码解读(三):tokenize方法
2015/03/31 Javascript
Angularjs中$http以post请求通过消息体传递参数的实现方法
2016/08/05 Javascript
详解vue项目的构建,打包,发布全过程
2017/11/23 Javascript
微信小程序实现给嵌套template模板传递数据的方式总结
2017/12/18 Javascript
原生JS实现的碰撞检测功能示例
2018/05/18 Javascript
bootstrap-table+treegrid实现树形表格
2019/07/26 Javascript
详解Node.JS模块 process
2020/08/31 Javascript
Python基于twisted实现简单的web服务器
2014/09/29 Python
Python下的twisted框架入门指引
2015/04/15 Python
Python将图片批量从png格式转换至WebP格式
2020/08/22 Python
利用Python自带PIL库扩展图片大小给图片加文字描述的方法示例
2017/08/08 Python
使用python语言,比较两个字符串是否相同的实例
2018/06/29 Python
Python实现平行坐标图的绘制(plotly)方式
2019/11/22 Python
第一范式(1NF)、第二范式(2NF)和第三范式(3NF)之间的区别是什么?
2016/04/28 面试题
.NET概念性的面试题
2012/02/29 面试题
什么是跨站脚本攻击
2014/12/11 面试题
咖啡蛋糕店创业计划书
2014/01/28 职场文书
优秀食品类广告词
2014/03/19 职场文书
《从现在开始》教学反思
2014/04/15 职场文书
骨干教师考核方案
2014/05/09 职场文书
模具专业求职信
2014/06/26 职场文书
食品科学与工程专业毕业生求职信范文
2014/07/21 职场文书
党员干部群众路线教育实践活动个人对照检查材料
2014/09/23 职场文书
2014党支部对照检查材料思想汇报
2014/10/05 职场文书
护士岗前培训心得体会
2016/01/08 职场文书
嵌入式Redis服务器在Spring Boot测试中的使用教程
2021/07/21 Redis
2022年四月新番
2022/03/15 日漫