二叉树的序列化和反序列化
二叉树是有结点指针将多个结点关联起来的抽象数据结构,是存在于内存中的,不能进行持久化;如果要将一颗二叉树持久化保存在磁盘文件中,需要将其转换成序列并储存在文件中。
这里讨论如何将二叉树生成前序序列字符串,然后读取前序序列,反序列化并生还原二叉树。
所谓的序列化是指遍历一遍二叉树,产生一个字符串序列,但与一般的前序序列不同,这里要用字符‘#’来记录空的结点。
如:
前序序列为 AB#C##D#EF###
序列化
序列化和先序遍历类似,只不过多了一个步骤,在读到结点为空时要加用字符‘#’记录。
C#代码实现如下:
结点定义
首先是对二叉树结点的定义:
class BinaryTreeNode
{
public int flag; //这里的flag在后面非递归反序列化时会用上
public char data;
public BinaryTreeNode lchild;
public BinaryTreeNode rchild;
public BinaryTreeNode(char data)
{
this.data = data;
this.flag = 1;
lchild = rchild = null;
}