美文网首页
二叉树的层序序列化与反序列化

二叉树的层序序列化与反序列化

作者: 他好像一 | 来源:发表于2020-05-31 17:39 被阅读0次

二叉树的正序列化:把二叉树按照某种遍历方式的结果以某种格式保存为字符串,从而使得内存中建立起来的二叉树可以持久保存。

序列化可以基于 先序、中序、后序、层序 的方式来进行遍历。

层序序列化要求:

1、从二叉树的根节点开始,逐层遍历

2、数据之间使用逗号“,”隔开

3、树的节点中,存在的节点将值(51、7、13等)存入数组中即可

4、结尾如果有不存在的节点,则全部忽略

根据规则,忽略掉结尾不存在的节点后,字符串应该为"51,7,13,5,,26,17,,,,,9"

一、正序列化

根据要求我们可以看出是用层序排序法来序列化,推荐用队列来存储节点。

实现步骤:

1.首先我们先将树的根节点(51)存入队列

2.利用队列先进先出原理取出根节点(51)

3.此时再存入根节点的左右子节点(左子节点:7,右子节点:13),那么队列中就有两个节点(7,13)

4.此时我们再从队列中取出当前根节点的左子节点(7),队列中只剩一个节点(13)

5.添加左子节点(7)的左右子节点(5,0),此时队列中节点个数为三个(13,5,0,这里空节点我们用0表示)

6.以此类推,直到所有节点都加入队列,并从队列中取出后,队列中无任何节点

代码示例

二叉树的反序列化:从文件或者数组中取出数据,重构二叉树

二、反序列化

依然采用队列来存储我们想要的树,再利用队列特性一一取出并赋值上符串相应的数值

实现步骤:

1.首先我们先定义一个树并初始化节点数值为0

2.将根节点存入队列

3.将队列的第一个节点取出并赋值

4.将根节点(51)的左右子节点放入队列中

5.将根节点的左子(7)节点取出并赋值,

6.加入节点(7)的左右子节点

6.以此类推,直到所有节点都加入队列,并从队列中取出后,队列中无任何节点

代码示例

相关文章

  • 二叉树的序列化 和反序列化

    对于二叉树的序列化与反序列化有n种方法,本文以先序和层序的方式序列化和反序列化 对于,以先序的方式序列化: 1、以...

  • 二叉树的三种遍历方法

    二叉树的序列化 为了方便构造二叉树来验证我们的算法,这里先介绍下二叉树的序列化和反序列化。 序列化 先序遍历整颗二...

  • 7_6二叉树的序列化

    首先我们介绍二叉树先序序列化的方式,假设序列化的结果字符串为str,初始时str等于空字符串。先序遍历二叉树,如果...

  • 二叉树的序列化

    首先我们介绍二叉树先序序列化的方式,假设序列化的结果字符串为str,初始时str等于空字符串。先序遍历二叉树,如果...

  • [Hard BST] 297. Serialize and De

    Description 对于一个二叉树进行序列化和反序列化 Solution 使用BFS,按照层插入

  • 二叉树序列化和反序列化

    二叉树序列化和反序列化 前序 序列化和反序列化

  • 面试题37:序列化二叉树

    题目:请实现一个函数,分别用来序列化和反序列化二叉树思路:序列化的时候,用中序遍历,注意叶子节点的左右子节点用“#...

  • 排序

    二叉树打印 二叉数按层遍历 二叉树的序列化与反序列化 排序 冒泡排序:时间复杂度o(n*2) 插入排序,时间复杂度...

  • Flask RESTful API开发之序列化与反序列化

    序列化(序列化)与反序列化(Deserialization)是RESTful API开发中绕不开的一环,开发时,序...

  • 297. Serialize and Deserialize B

    二叉树序列化与反序列化 Runtime: 172 ms, faster than 42.05% Memory Us...

网友评论

      本文标题:二叉树的层序序列化与反序列化

      本文链接:https://www.haomeiwen.com/subject/kfcrzhtx.html