二叉树永久化问题

问如何将一个二叉树序列化保存到文件,使得文件越小越好.
可能的方法:
第一种方法:把二叉树按前序和中序遍历一遍,存两次二叉树。
第二种方法:将二叉树按左枝为0,右枝为1进行路径编码,那么每个节点都可以表示成,节点信息和路径信息进行永久化。
第三种方法:将二叉树变成满二叉树,采用数组存储满二叉树,那么数据index和根据二叉树的节点信息进行永久化。
第四种方法:采用一个位图和所有节点信息进行存储,位图上的0代表着相应满二叉树的节点没有节点,1代表有节点信息。
四种方法比较:第一种方法,冗余信息量刚好是原有数据的两倍。
第二种方法存储的是节点信息和路径信息,冗余信息量是(路径信息*节点数)
第三种方法:冗余信息为,sizeof(unsigned int) * 节点数
第四种方法:冗余信息为树的层数K,(2^k -1)bit 
因此第四种方法在二叉树是满二叉树或者二叉树的层数比较小的情况下,信息量比较小,但是在树的层比较丰富的情况下,
冗余信息非常大。我觉得也不是什么特别好的方法。貌似我还是没有得到正确答案。


如果二叉树的节点数据占用字节较大的话,可以使用对每个节点数据用一个int编号,这样每个二叉树节点可以表示为3个int整数,0编号表示为空,存储二叉树就是使用3个int*节点数,另外存储int+节点数据,int存储可以使用变字节压缩

转载于:https://www.cnblogs.com/kevinLee-xjtu/archive/2011/12/05/2299101.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值