C++之二叉树的序列化与反序列化
问题
来源: LintCode7
设计一个算法,并编写代码来序列化和反序列化二叉树。将树写入一个文件被称为“序列化”,读取文件后重建同样的二叉树被称为“反序列化”。
如何反序列化或序列化二叉树是没有限制的,你只需要确保可以将二叉树序列化为一个字符串,并且可以将字符串反序列化为原来的树结构。
如上图所示是通过前序遍历(深度优先搜索DFS)的方式进行二叉树序列化的过程。
实现
/*** buildTree.cpp
*
* seralize & deseralize a binary tree with DFS */
#include<iostream>
#include<string>using namespace std;struct TreeNode {int val;TreeNode *left, *right;TreeNode(int val) {this->val = val;this->left = this->right = NULL;}
};// classTreeNode {
// public:
// int val;
// TreeNode *left, *right;
// TreeNode(int val) {
// this->val = val;
// this->left = this->right = NULL;
// }
// };void SerializeCore(const TreeNode* pRoot, string& stream)
{if (pRoot == nullptr){stream += "#,";return;}//stream << pRoot->val << ',';stream += to_string(pRoot->val);stream += ',';SerializeCore(pRoot->left, stream);SerializeCore(pRoot->right, stream);
}string serialize(TreeNode * root) {// write your code herestring str = "{";SerializeCore(root, str);str += "}";return str;
}TreeNode * deserializeCore(string &data)
{if (data.empty()) return nullptr;if ('#' == data.substr(data.find_first_not_of(' '), 1).data()[0]){data = data.substr(data.find_first_of(',') + 1);return NULL;}TreeNode *ret = new TreeNode(stoi(data));data = data.substr(data.find_first_of(',') + 1);ret->left = deserializeCore(data);ret->right = deserializeCore(data);return ret;
}TreeNode * deserialize(string &data) {// write your code hereif (data.empty())return NULL;data = data.substr(1, data.length() - 2);TreeNode * ret = deserializeCore(data);return ret;
}int main()
{//TreeNode * root = new TreeNode(1);//TreeNode *l1 = new TreeNode(2);//TreeNode *r1 = new TreeNode(3);//TreeNode *l1l = new TreeNode(4);//TreeNode *l1r = new TreeNode(5);//TreeNode *r1l = new TreeNode(6);//TreeNode *r1r = new TreeNode(7);//TreeNode *r2l = new TreeNode(8);//TreeNode *r3r = new TreeNode(9);//root->left = l1;//root->right = r1;//l1->left = l1l;//l1->right = l1r;//r1->left = r1l;//r1->right = r1r;//r1l->left = r2l;//r2l->right = r3r;//string str = serialize(root);//cout << str << endl;string str("{11, 2, 4, #, #, 5, #, #, 3, 6, 8, #, 9, #, #, #, 7, #, #, }");TreeNode* root = deserialize(str);return 0;
}
C++之二叉树的序列化与反序列化相关推荐
- [Java]LeetCode297. 二叉树的序列化与反序列化 | Serialize and Deserialize Binary Tree
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★ ➤微信公众号:山青咏芝(shanqingyongzhi) ➤博客园地址:山青咏芝(https://www.cnblog ...
- python代码实现二叉树的序列化和反序列化
python代码实现二叉树的序列化和反序列化 二叉树的序列化 二叉树的序列化是指:把一棵二叉树按照某种遍历方式的结果以某种格式保存为字 符串,从而使得内存中建立起来的二叉树可以持久保存. 二叉树的反序 ...
- 二叉树的序列化与反序列化
题目: 序列化是将一个数据结构或者对象转换为连续的比特位的操作,进而可以将转换后的数据存储在一个文件或者内存中,同时也可以通过网络传输到另一个计算机环境,采取相反方式重构得到原数据. 请设计一个算法来 ...
- 算法练习day10——190328(二叉树的先序、 中序、 后序遍历, 包括递归方式和非递归方式、找到一个节点的后继节点、二叉树的序列化和反序列化)
1.实现二叉树的先序. 中序. 后序遍历, 包括递归方式和非递归方式 1.1 访问节点的顺序 节点访问顺序如下图所示: 访问顺序:1 2 4 4 4 2 5 5 5 2 1 3 6 6 6 3 7 7 ...
- 【数据结构与算法】之深入解析“二叉树的序列化与反序列化”的求解思路与算法示例
一.题目要求 序列化是将一个数据结构或者对象转换为连续的比特位的操作,进而可以将转换后的数据存储在一个文件或者内存中,同时也可以通过网络传输到另一个计算机环境,采取相反方式重构得到原数据. 请设计一个 ...
- 数据结构与算法之二叉树的序列化和反序列化及判断一棵树是否为平衡二叉树
数据结构与算法之二叉树的序列化和反序列化及判断一棵树是否为平衡而二叉树 目录 二叉树的序列化和反序列化 判断一棵树是否为平衡而二叉树 1. 二叉树的序列化和反序列化 1. 递归版本序列化和反序列化 代 ...
- 【LeetCode】【HOT】297. 二叉树的序列化与反序列化(BFS)
[LeetCode][HOT]297. 二叉树的序列化与反序列化 文章目录 [LeetCode][HOT]297. 二叉树的序列化与反序列化 package hot;import java.util. ...
- lintcode 7. 二叉树的序列化和反序列化 Python代码
'''7. 二叉树的序列化和反序列化 描述 设计一个算法,并编写代码来序列化和反序列化二叉树.将树写入一个文件被称为"序列化",读取文件后重建同样的二叉树被称为"反序列化 ...
- leetcode-017-297. 二叉树的序列化与反序列化
我又又又开始刷题了... 不过这么一天两个小时,其实还是蛮浪费时间的,毕竟我对C++其实并不是特别熟悉,所以很多时候花费在语法上面的时间,就很磨人. 序列化是将一个数据结构或者对象转换为连续的比特位的 ...
- 一天一大 leet(二叉树的序列化与反序列化)难度:困难 DAY-16
20200616 题目(难度:困难): 序列化是将一个数据结构或者对象转换为连续的比特位的操作, 进而可以将转换后的数据存储在一个文件或者内存中, 同时也可以通过网络传输到另一个计算机环境,采取相反方 ...
最新文章
- 讨厌别人不写注释,但自己也不爱写?那么试试这个IDEA的注释插件吧!
- 怎么画正五边形步骤_每个药店必备三伏贴的POP海报,我教你画
- C++学习笔记35:函数模板
- 计算机基础知识考点题,2015年计算机二级公共基础知识考点测试题(1)
- 3DSlicer12:风格准则
- h命令可以获取mysql客户端的帮助信息_如何获取MySQL帮助信息
- [Luogu 2486] SDOI2011 染色
- PHP中不错的类的调用方法
- npm i 命令长时间卡住的解决办法
- 建立RoBERTa模型以发现Reddit小组的情绪
- 数据结构——郝斌老师——部分笔记
- 台式计算机 无线已连接 无法上网,WiFi已连接不可上网怎么办
- python桌面应用_用Python写个Metro风格的桌面程序
- 云计算day12-Kubernetes_K8s
- 打印可自定义的字母金字塔(python实现)
- Spring Ioc原理解析
- Git泄露 之Stash(做题过程)
- dom更新到底在javascript事件循环的哪个阶段?「前端每日一题v22.11.17」
- 基于Python进行人脸验证人脸识别综合开发
- 菜鸟的病毒分析5 pe感染文件感染病毒
热门文章
- Q3净利润“井喷”,亚马逊已握两万亿市值“通关密码”?
- layui动态设置单选按钮选中
- HTML5 标签列表
- JavaScript中几个不常用的绑定事件
- 掌据这几个设计思想,从单片机小白立马升级为单片机工程师
- CSS控制图片等比例缩放
- ims体系结构 信令体系_我们如何使用体系结构决策记录快速移动而不破坏事物(尽可能多)...
- VS2008C++C#混合编程
- [CF923D]Picking Strings
- 浮生日记 2022-4-12