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读文件逐行处理的示例代码分享
Dec 27 Python
python中pass语句用法实例分析
Apr 30 Python
浅谈Python类的__getitem__和__setitem__特殊方法
Dec 25 Python
Python实现感知器模型、两层神经网络
Dec 19 Python
对python .txt文件读取及数据处理方法总结
Apr 23 Python
python: 判断tuple、list、dict是否为空的方法
Oct 22 Python
Scrapy框架爬取Boss直聘网Python职位信息的源码
Feb 22 Python
Python3之手动创建迭代器的实例代码
May 22 Python
python实现身份证实名认证的方法实例
Nov 08 Python
opencv python如何实现图像二值化
Feb 03 Python
TensorFlow:将ckpt文件固化成pb文件教程
Feb 11 Python
Python爬取奶茶店数据分析哪家最好喝以及性价比
Sep 23 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
打造计数器DIY三步曲(上)
2006/10/09 PHP
php PDO中文乱码解决办法
2009/07/20 PHP
PHP数组排序函数合集 以及它们之间的联系分析
2013/06/27 PHP
PHP生成sitemap.xml地图函数
2013/11/13 PHP
php 使用curl模拟ip和来源进行访问的实现方法
2017/05/02 PHP
jQuery获得内容和属性示例代码
2014/01/16 Javascript
html的DOM中document对象anchors集合用法实例
2015/01/21 Javascript
JavaScript学习笔记之创建对象
2016/03/25 Javascript
深入剖析JavaScript中的函数currying柯里化
2016/04/29 Javascript
jQuery实现的购物车物品数量加减功能代码
2016/11/16 Javascript
在vue中,v-for的索引index在html中的使用方法
2018/03/06 Javascript
聊聊Vue中provide/inject的应用详解
2019/11/10 Javascript
关于引入vue.js 文件的知识点总结
2020/01/28 Javascript
解决vue addRoutes不生效问题
2020/08/04 Javascript
[02:16]卖萌的僵尸 DOTA2神话信使飞僵小宝来袭
2014/03/24 DOTA
在Windows服务器下用Apache和mod_wsgi配置Python应用的教程
2015/05/06 Python
5种Python单例模式的实现方式
2016/01/14 Python
Python实现压缩和解压缩ZIP文件的方法分析
2017/09/28 Python
python获取酷狗音乐top500的下载地址 MP3格式
2018/04/17 Python
Jupyter notebook在mac:linux上的配置和远程访问的方法
2019/01/14 Python
python函数与方法的区别总结
2019/06/23 Python
python 基于TCP协议的套接字编程详解
2019/06/29 Python
python3 常见解密加密算法实例分析【base64、MD5等】
2019/12/19 Python
sklearn+python:线性回归案例
2020/02/24 Python
如何理解Python中的变量
2020/06/01 Python
django restframework serializer 增加自定义字段操作
2020/07/15 Python
基于CSS3 animation动画属性实现轮播图效果
2017/09/12 HTML / CSS
美国高街时尚品牌:OASAP
2016/07/24 全球购物
英国最大的电子产品和家电零售企业:Currys PC World
2016/09/24 全球购物
Staples英国官方网站:办公用品一站式采购
2017/10/06 全球购物
财务工作疏忽检讨书
2014/09/11 职场文书
村主任群众路线教育实践活动个人对照检查材料思想汇报
2014/10/01 职场文书
房屋租赁委托书范本
2014/10/04 职场文书
老人节主持词
2015/07/04 职场文书
MySQL InnoDB ReplicaSet(副本集)简单介绍
2021/04/24 MySQL
详细谈谈JavaScript中循环之间的差异
2021/08/23 Javascript