社区
C++ 语言
帖子详情
多叉树的序列化和反序列化--急求
yang228
2011-09-16 09:29:56
我需要操作一个比较大的多叉树结构,有的结点可能有几千的孩子,这个树结构是我读文件生成的,文件大概2M多,生成树结构太慢了,我想直接序列化之后存储起来,以后直接读序列化的文件,这样应该会快很多吧。 期待高手给点意见啊。。。
...全文
675
10
打赏
收藏
多叉树的序列化和反序列化--急求
我需要操作一个比较大的多叉树结构,有的结点可能有几千的孩子,这个树结构是我读文件生成的,文件大概2M多,生成树结构太慢了,我想直接序列化之后存储起来,以后直接读序列化的文件,这样应该会快很多吧。 期待高手给点意见啊。。。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
10 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
yang228
2011-09-16
打赏
举报
回复
python 搞这个很爽吗? 额,还没用过。。
冻结
2011-09-16
打赏
举报
回复
如果用python,那就爽了。
冻结
2011-09-16
打赏
举报
回复
以前弄过,
序列化的时候,深度遍历。
反序列化的时候,记录一个节点总数,用父子关系,再新建这个结构。
我用的是MFC的序列化。
yang228
2011-09-16
打赏
举报
回复
这个建树的时候,每次都要按层遍历,比较麻烦,解析的时候肯定慢了, 我想着序列化好了的话,下次生成的时候只需要读文件就可以了,不需要解析,这样就能快不少了。
SonicLing
2011-09-16
打赏
举报
回复
先想想如何提高解析速度吧。序列化和反序列化本质还是解析、反解析,只不过采用一种好的顺序可能会快一点,但是也不一定能快多少,这要看你原先的解析难度有多难,速度最快能有多快。
yang228
2011-09-16
打赏
举报
回复
原来的文件吗? 类似于这样的, abc def aag
我做的树就是root
a d
b a e
c g c
大概这样
qq120848369
2011-09-16
打赏
举报
回复
B树么,不解释。
ryfdizuo
2011-09-16
打赏
举报
回复
文件中是怎么存储的。
yang228
2011-09-16
打赏
举报
回复
额,大家给点意见吧。。在线等。
SonicLing
2011-09-16
打赏
举报
回复
template<typename T>
struct node_storage
{
T data;
unsigned parent;
};
template<typename T>
struct node : public node_storage<T>
{
std::list<unsigned> children;
}
typedef std::vector<node<my_type> > tree_t;
tree_t my_tree;
node_storage<my_type> *serial = new node_storage<my_type>(my_tree.size());
for ( ... ) serial[i] = my_tree[i];
fwrite(serial, sizeof(node_storage<my_type>), my_tree.size(), fp);
//========================================
//计算count
fread(serial, sizeof(node_storage<my_type>), count, fp);
for (...) my_tree.push_back(serial[i]);
// 重建children列表
for (...) my_tree[my_tree[i].parent].children.push_back(i);
二叉树4:二叉树的
序列化
和
反
序列化
二叉树4:二叉树的
序列化
和
反
序列化
【LeetCode】P297二叉树的
序列化
和
反
序列化
最近刷题学习都是二叉树的专题,那么二叉树相对于链表来说,不再是单个的串联起来,而是有了分叉的概念,这也因此带来了长度上的缩减,可以看成是原来链表查找的复杂度对数级别的降低(因为遍历的层数下降了), 既然要开始复习二叉树,那么就先把基本的前中后序过一遍(不要小看这个前中后序,个人刷题感觉这个对于解决二叉树问题还是很重要的),包括递归和非递归的形式。这里的代码并不算难,理解了基本的概念之后就可以自己动手敲代码了,尽量练习到可以熟练敲出来的地步,当然不是单纯背代码,而是知道怎么实现的原理。
C++实现二叉树的
序列化
和
反
序列化
1. 题目要求 二叉树的
序列化
和
反
序列化
2. 思路 2.1
序列化
首先我们介绍二叉树先序
序列化
的方式,假设
序列化
的结果字符串为str,初始时str等于空字符串。先序遍历二叉树,如果遇到空节点,就在str的末尾加上“#!”,“#”表示这个节点为空,节点值不存在,当然你也可以用其他的特殊字符,“!”表示一个值的结束。如果遇到不为空的节点,假设节点值为3,就在str的末尾加上“3!”。现在请你...
二叉树
序列化
和
反
序列化
的两种方式
本文主要介绍二叉树的
序列化
和
反
序列化
,内容为二叉树和数组的互相转化。 二叉树的
序列化
按层遍历二叉树 输出数组 S形遍历二叉树 输出数组 先序遍历二叉树 输出数组 中序遍历二叉树 输出数组 后序遍历二叉树 输出数组 二叉树的
反
序列化
将按层次遍历的方式输入的数组 构造成一个二叉树 将按先序遍历的方式输入的数组 构造成一个二叉树 将按中序遍历的方式输入的数组 构造成一个二叉树 将按后序遍历的方式输入的数组 构造成一个二叉树 根据前序遍历序列和中序遍历序列,构建唯一一棵确定的二叉树 根据后序遍
二叉树的
序列化
和
反
序列化
序列化
是将一个数据结构或者对象转换为连续的比特位的操作,进而可以将转换后的数据存储在一个文件或者内存中,同时也可以通过网络传输到另一个计算机环境,采取相反方式重构得到原数据。简而言之:1.我们二叉树把转化为数组或字符串来进行存储的过程就叫二叉树的
序列化
。2.我们通过转化的数组或字符串来还原出二叉树的过程叫二叉树的
反
序列化
。1.二叉树的
序列化
的方式有多种,前序后序,层序都是可以的,只有中序不可以。2.注意:要把空节点补出来,才可以进行。
C++ 语言
65,212
社区成员
250,514
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章