二叉树的序列化和反序列化C#版本(前序序列,包括递归和非递归实现)

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

二叉树是有结点指针将多个结点关联起来的抽象数据结构,是存在于内存中的,不能进行持久化;如果要将一颗二叉树持久化保存在磁盘文件中,需要将其转换成序列并储存在文件中。
这里讨论如何将二叉树生成前序序列字符串,然后读取前序序列,反序列化并生还原二叉树。
所谓的序列化是指遍历一遍二叉树,产生一个字符串序列,但与一般的前序序列不同,这里要用字符‘#’来记录空的结点。
如:
在这里插入图片描述
在这里插入图片描述
前序序列为 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;
        }
     
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值