二叉树序列化和反序列化
1、二叉树 ——> 字符串(序列化)
2、字符串 ——> 二叉树(反序列化)
序列化的方式
1、根据先序遍历序列化
2、 根据中序遍历序列化
3、根据后序遍历序列化
4、按层序列化
题目:
给定一棵二叉树的头节点head,并已知二叉树节点值的类型为32位整型。请设计一种二叉树序列化和反序列化的方案,并用代码实现。
思路:
例:先序遍历对二叉树进行序列化
- 假设序列化结果为str, 初始时str为空字符串。
- 先序遍历二叉树时如果遇到空节点,在str末尾加上
#!
。 - 如果遇到不为空的节点,假设节点值是 4 ,就在str的末尾加上
4!
。
举个栗子:
这里我们可能很奇怪为什么要用一个 !
特殊字符来表示二叉树节点值的结束?
反序列化
将一棵二叉树的先序遍历结果反序列化。
注意:
- 选择用什么样的遍历方式序列化,就选择用什么样的方式反序列化。
- 一棵树序列化的结果是唯一的,唯一的结果生成的二叉树也是唯一的。
- 中序和后序遍历序列化和反序列化也是类似。
按层遍历方式对二叉树序列化
方法:
- 用队列来进行二叉树的按层遍历,即宽度优先遍历。
- 除了访问节点的顺序是按层遍历之外,对结果字符串的处理,与上面介绍的处理方式一样(添加特殊字符)。
- 反序列化过程同理。