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