二叉树的序列化、反序列化

一、 使用先序遍历的方式

【1】中的方式是采用设定#的方式,当访问读取了#时候,创建null,返回。

二、二叉搜索树的序列化

二叉搜索树具有的有序的性质,可以利用这个性质来递归的反序列化BST

对当前节点要处理的数据的范围设定一个边界,当读取的值是在这个范围里面的时候,则进行node的创建,否则创建NULL节点,对于值的node创建需要递归到上一层递归,寻找新的方案,如果还是不行,以此类推。

[1] http://blog.csdn.net/pi9nc/article/details/9701637

[2] http://blog.csdn.net/sgbfblog/article/details/7774347

时间: 2024-10-14 11:12:24

二叉树的序列化、反序列化的相关文章

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

http://blog.csdn.net/qq_27703417/article/details/70958692 先序遍历二叉树,如果遇到空节点,就在str的末尾加上"#!","#"表示这个节点为空,节点值不存在,当然你也可以用其他的特殊字符,"!"表示一个值的结束.如果遇到不为空的节点,假设节点值为3,就在str的末尾加上"3!".现在请你实现树的先序序列化. 先序遍历 import java.util.*; //使用递归

lintcode 中等题:binary tree serialization 二叉树的序列化和反序列化

题目 二叉树的序列化和反序列化 设计一个算法,并编写代码来序列化和反序列化二叉树.将树写入一个文件被称为“序列化”,读取文件后重建同样的二叉树被称为“反序列化”. 如何反序列化或序列化二叉树是没有限制的,你只需要确保可以将二叉树序列化为一个字符串,并且可以将字符串反序列化为原来的树结构. 样例 给出一个测试数据样例, 二叉树{3,9,20,#,#,15,7},表示如下的树结构: 3 / 9 20 / 15 7 我们的数据是进行BFS遍历得到的.当你测试结果wrong answer时,你可以作为输

Leetcode 297.二叉树的序列化和反序列化

二叉树地序列化和反序列化 序列化是将一个数据结构或者对象转换为连续的比特位的操作,进而可以将转换后的数据存储在一个文件或者内存中,同时也可以通过网络传输到另一个计算机环境,采取相反方式重构得到原数据. 请设计一个算法来实现二叉树的序列化与反序列化.这里不限定你的序列 / 反序列化算法执行逻辑,你只需要保证一个二叉树可以被序列化为一个字符串并且将这个字符串反序列化为原始的树结构. 示例:  你可以将以下二叉树: 序列化为 "[1,2,3,null,null,4,5]" 提示: 这与 Le

二叉树的序列化和反序列化(先序,按层序列化),包含递归图

目录 二叉树的序列化与反序列化 按层序列化 使用#!和!的原因: 二叉树的序列化与反序列化 序列化:将对象的状态信息转换为可以存储或传输的形式的过程 二叉树的序列化:就是将二叉树转换成字符串 二叉树的反序列化:通过字符串还原一棵二叉树,返回树的头节点. 先序序列化二叉树 上面这棵树的先序序列化结果为5!3!2!1!#!#!#!4!#!#!8!7!6!#!#!#!10!9!#!#!11!#!#! 从上图中我们可以看出在节点为空的位置使用"#!"来代替,每个节点后的数值都添加一个"

序列化反序列化

对Java对象序列化的目的是持久化对象或者为RMI(远程方法调用)传递参数和返回值. 下面是一个序列化对象写入文件的例子: ---------------------------- 1 package utils; 2 3 import java.io.File; 4 import java.io.FileInputStream; 5 import java.io.FileOutputStream; 6 import java.io.IOException; 7 import java.io.O

protostuff序列化/反序列化

Protostuff是基于Google protobuff技术的Java版本,直接使用原生的protobuff是需要数据结构的预编译过程,需要编写.proto格式的配置文件,再通过protobuff提供的工具翻译成目标语言代码,而Protostuff动态支持了protobuff的预编译的过程,可以直接使用普通java POJO进行序列化,简化编码. 经过实测序列化性能相对原生protpbuff没有影响. 由于Protostuff只支持Java实现,不过并未对序列化格式有做任何修改,所以Proto

.net 序列化反序列化

.net 序列化创建对象的深拷贝 public static object DeepClone(object original) { using (MemoryStream stream = new MemoryStream()) { //构造序列化格式化器来执行所有实习工作 BinaryFormatter formatter = new BinaryFormatter(); //流上下文 formatter.Context = new StreamingContext(StreamingCon

.NET序列化反序列化总结

一直想写这个专题,但是工作后人很懒散,总下不了决心,今天一个人在家就写下来. 关于序列化,可以总结出它的作用有以下几点: 1.记录应用程序的状态,在下次启动时还原上次的状态. 2.进程之间的通信,如使用socket编程时使用.这里的进程包括同一台主机之间进程的通信,也包括不同主机之间的通信. 3.作为对象的深拷贝的一种实现方式. .net中的序列化支持下面几种序列化机制: 1.使可序列化的类型序列化和反序列化 2.控制可序列化的类型的序列化/反序列化内容和过程 3.将类型序列化/反序列化为不同的

常用json序列化/反序列化技术对比测试

目前常用的json工具有:1.json-lib:2.jakson-mapper:3.fastjson. 下面对这三种工具的性能进行简单对比测试. 测试样本:一个126K的json文件,内容为json数组. 测试方法:反序列化,读取文件中的json转化为java对象. 测试代码如下: 1 @Test 2 public void testDeserialize() throws Exception { 3 String dealer = "d:\\auto\\json\\100016109.js&q

序列化反序列化的一些可用种类

1.java自带的 2.kryo 3.FST 4.protostuff protobuf的一个缺点是需要数据结构的预编译过程,首先要编写.proto格式的配置文件,再通过protobuf提供的工具生成各种语言响应的代码.由于java具有反射和动态代码生成的能力,这个预编译过程不是必须的,可以在代码执行时来实现.有个protostuff(http://code.google.com/p/protostuff/)已经实现了这个功能. protostuff基于Google protobuf,但是提供了