返回顶部
首页 > 资讯 > 精选 >刷题系列 - 序列化和反序列化一个二叉树
  • 598
分享到

刷题系列 - 序列化和反序列化一个二叉树

2023-06-02 00:06:47 598人浏览 薄情痞子
摘要

序列化和反序列化一个二叉树,是很开放的一题,就是给出一个二叉树,用序列化方法生成一个字符串;然后用反序列化方法把这个字符串生成原来二叉树。这个在编程时候各个类型一般都有序列化的,用于存储。这里面要用到python中list转化字符串方法 &

序列化和反序列化一个二叉树,是很开放的一题,就是给出一个二叉树,用序列化方法生成一个字符串;然后用反序列化方法把这个字符串生成原来二叉树。这个在编程时候各个类型一般都有序列化的,用于存储。

这里面要用到python中list转化字符串方法 ','.join(list), 和字符串转换为list的方法string.split(',')。

其实可以用之前刷题的几个题目来组合,比如遍历二叉树生成中序和后序两个队列,合并为一个队列,作为序列化方法;然后有一题是按照中序和后序队列生成二叉树,就可以作为反序列化的方法使用。当然,这样会有很多冗余数据。

其实这个题目比较麻烦的地方就是优化,实现倒是很不难。

我这边用了序列化层级遍历,就是从根节点到叶子节点一层层按照从左到用遍历,如果某个节点的左或者右子节点为空,用#号代替;最后叶子节点下面会都是”#“号,这里做了个判断,如果某层都是#号,视作为空,结束遍历。

反序列化采用对应的方法,这里不多说,看代码即可。

# Definition for a binary tree node.# class TreeNode(object):#     def __init__(self, x):#         self.val = x#         self.left = None#         self.right = Noneclass Codec:    def serialize(self, root):        """Encodes a tree to a single string.                :type root: TreeNode        :rtype: str        """        if root != None:            checkList = [root]        else:            checkList = []        AllNodeList = []        while checkList != []:            nextList = []            for Node in checkList:                if Node != '#':                    AllNodeList.append(str(Node.val))                    if Node.left == None:                        nextList.append('#')                    else:                        nextList.append(Node.left)                    if Node.right == None:                        nextList.append('#')                    else:                        nextList.append(Node.right)                else:                    AllNodeList.append(Node)            if len(set(nextList)) == 1 and '#' in nextList:                nextList = []            checkList = nextList        return ','.join(AllNodeList)            def deserialize(self, data):        """Decodes your encoded data to tree.                :type data: str        :rtype: TreeNode        """        if data == '':            currentLevel = []            root = None        else:            AllNodeList = data.split(",")            root = TreeNode(int(AllNodeList.pop(0)))            currentLevel =[root]        while currentLevel != [] and AllNodeList!= []:            nextLevel = []            for node in currentLevel:                leftValue = AllNodeList.pop(0)                if leftValue != '#':                    node.left = TreeNode(int(leftValue))                    nextLevel.append(node.left)                                    rightValue = AllNodeList.pop(0)                if rightValue != '#':                    node.right = TreeNode(int(rightValue))                    nextLevel.append(node.right)            print([node.val for node in nextLevel])            currentLevel = nextLevel        return root  # Your Codec object will be instantiated and called as such:# codec = Codec()# codec.deserialize(codec.serialize(root))

--结束END--

本文标题: 刷题系列 - 序列化和反序列化一个二叉树

本文链接: https://www.lsjlt.com/news/228214.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 刷题系列 - 序列化和反序列化一个二叉树
    序列化和反序列化一个二叉树,是很开放的一题,就是给出一个二叉树,用序列化方法生成一个字符串;然后用反序列化方法把这个字符串生成原来二叉树。这个在编程时候各个类型一般都有序列化的,用于存储。这里面要用到python中list转化字符串方法 &...
    99+
    2023-06-02
  • Java版本和C++版本的二叉树序列化与反序列化
    目录1、什么是二叉树的序列化与反序列化2、先序方式序列化和反序列化3、后序方式序列化和反序列化4、层序方式序列化和反序列化5、完整代码 C++ 版1、什么是二叉树的序列化与反序列化 ...
    99+
    2024-04-02
  • 刷题系列 - 中序和后序遍历队列,构造对应二叉树;
    假期继续刷题,也没有别的什么事情可以干。这个题是给出中序和后序遍历队列,构造对应二叉树;题目很简单,如下图,给出两个遍历队列,构成二叉树,这里假定没有重复点。 想了好几天,真是惭愧,因为一直想一次遍历就完成构造,最后发现不行;然后...
    99+
    2023-06-02
  • go语言实现二叉树的序例化与反序列化
    目录二叉树的反序列化反序列化解题思路TreeNode结构体反序列化方法代码解读二叉树的序列化介绍解题思路代码代码解读运行结果二叉树的反序列化 反序列化 树的反序列化故名知意就是将一个...
    99+
    2024-04-02
  • [Java反序列化]—Shiro反序列化(一)
    环境配置:  IDEA搭建shiro550复现环境_普通网友的博客-CSDN博客 漏洞原理: Apache Shiro框架提供了记住密码的功能(RememberMe),用户登录成功后会生成经过加密并编码的cookie。在服务端对remem...
    99+
    2023-09-03
    java 开发语言
  • PHP序列化和反序列化
    一.什么是序列化和反序列化 php类与对象 类是定义一系列属性和操作的模板,而对象,就是把属性进行实例化,完事交给类里面的方法,进行处理。 `。尝试构造payload: ...
    99+
    2023-08-31
    php 开发语言
  • 刷题系列 - 给出前序和中序遍历队列,构造对应二叉树
    既然中序和后序队列构成二叉树写了,就把前序和中序一做吧。原理其实也很简单,前序队列第一个点就是根节点,再中序队列里面这个根节点可以分出左右两个树的两个中序队列,然后可以按照左右树的节点数量,再前序节点里面分出对应两组前序队列;然后反复递归即...
    99+
    2023-06-02
  • 序列化与反序列化
    序列化(pickling)   把变量从内存中变成可存储或传输的过程 反序列化(unpickling)   把变量内容从序列化的对象重新读到内存里的过程 序列化&反序列化的意义  在程序运行过程中,对象可在内存中被自由的修改  一...
    99+
    2023-01-31
    序列 化与 序列化
  • go语言怎么实现二叉树的序例化与反序列化
    本篇内容主要讲解“go语言怎么实现二叉树的序例化与反序列化”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“go语言怎么实现二叉树的序例化与反序列化”吧!二叉树的反序列化反序列化树的反序列化故名知意...
    99+
    2023-06-30
  • SpringBoot之Json的序列化和反序列化问题
    目录控制json序列化/反序列化1. @JsonIgnoreProperties的用法2. @JsonProperty 注解3. @JsonCreator 注解4. @JsonSet...
    99+
    2024-04-02
  • Java序列化和反序列化(详解)
    一、理解Java序列化和反序列化 Serialization(序列化):将java对象以一连串的字节保存在磁盘文件中的过程,也可以说是保存java对象状态的过程。序列化可以将数据永久保存在磁盘上(通常保存在文件中)。 deserializa...
    99+
    2023-09-11
    java 开发语言
  • Java序列化与反序列化
    目录Java 序列化与反序列化序列化APIObjectOutputStreamObjectInputStreamserialVersionUIDTransient (瞬态变量)实例理...
    99+
    2023-05-14
    Java序列化 Java反序列化
  • 【反序列化漏洞-01】序列化与反序列化概述
    为什么要序列化 百度百科上关于序列化的定义是,将对象的状态信息转换为可以存储或传输的形式(字符串)的过程。在序列化期间,对象将其当前状态写入到临时或持久性存储区(非关系型键值对形式的数据库Redis,与数组类似)。以后,可以通过从存储区中...
    99+
    2023-09-06
    web安全 安全 反序列化 序列化 PHP反序列化漏洞 Powered by 金山文档
  • PHP的序列化和反序列化详情
    目录一、PHP 为什么要反序列化?二、PHP如何反序列化?三、PHP反序列化漏洞1、常用 的魔术方法2、漏洞产生条件3、题目一、PHP 为什么要反序列化? PHP程序执行结束以后会将...
    99+
    2024-04-02
  • PHP的序列化和反序列化入门
    什么是PHP序列化 serialize() //将一个对象转换成一个字符串unserialize() //将字符串还原成一个对象 通过序列化与反序列化我们可以很方便的在PHP中进行对象的传递。本质上反序列化是没有危害的。但是如果...
    99+
    2023-10-27
    android
  • 协议,序列化,反序列化,Json
    文章目录 协议序列化和反序列化网络计算器protocol.hppServer.hppServer.ccClient.hppClient.cclog.txt通过结果再次理解通信过程 Json...
    99+
    2023-09-01
    json 网络 服务器
  • Java之对象的序列化和反序列化
    对象的序列化和反序列化1)对象序列化,就是将Object对象转换成byte序列,反之叫对象的反序列化。2)序列化流(ObjectOutputStream),是字节的过滤流—— writeObject()方法 反序列化流(Object...
    99+
    2019-09-29
    Java IO流 对象 序列化 反序列化
  • 图文浅析Java序列化和反序列化
    序列化 序列化:将对象转换为二进制序列在网络中传输或保存到磁盘 反序列化:从网络或磁盘中将二进制序列转换为对象 注意: 对象必须实现Serializable接口 对象的所有属性都要...
    99+
    2024-04-02
  • C#对Json进行序列化和反序列化
    一、Json简介 Json(JavaScript Object Notation) 是一种轻量级的数据交换格式。它基于JS的一个子集。 Json采用完全独立于语言的文本格式。这使得J...
    99+
    2024-04-02
  • C#如何实现序列化和反序列化
    这篇文章给大家分享的是有关C#如何实现序列化和反序列化的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。.net下有一种技术叫做对象序列化,说得通俗一点,C#序列化就是把一个对象保存到一个文件或数据库字段中去,C#反...
    99+
    2023-06-17
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作