to_string(x) 将数字x转化为string

atoi(x) 将char转化为int

stoi(x) 将string 转化为int

采用中序遍历的顺序存储,NULL用#表示,以,分隔,O(n)time O(n) space

/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/ /**
使用先序递归序列来进行序列化与反序列化
to_string转化为string以逗号分隔;递归终点x->val==NULL getline(s,str,',');每次读取','之前的字符串;递归终点str=="#"
**/
class Codec {
public: // Encodes a tree to a single string.
string serialize(TreeNode* root) {
if(root==NULL)
return "#";
else
return to_string(root->val)+","+serialize(root->left)+","+serialize(root->right);
} // Decodes your encoded data to tree.
TreeNode* deserialize(string data) {
if(data=="#")
return NULL;
stringstream s(data);
return makedeserialize(s);
}
TreeNode* makedeserialize(stringstream&s){
string str;
getline(s,str,',');
if(str=="#")
return NULL; TreeNode* root=new TreeNode(stoi(str));
root->left=makedeserialize(s);
root->right=makedeserialize(s); return root;
}
}; // Your Codec object will be instantiated and called as such:
// Codec codec;
// codec.deserialize(codec.serialize(root));

采用层序遍历的顺序,储存每一层的值,不存在的或者NULL值用#代替,每个位置以'/'结束

/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Codec {
public: // Encodes a tree to a single string.
string serialize(TreeNode* root) {
string res;
queue<TreeNode*> q;
q.push(root);
int flag=;
while(flag){
flag=;
int k=q.size();
for(int i=;i<k;i++){
TreeNode* p=q.front();
q.pop();
if(p==NULL){
res.push_back('#');
q.push(NULL);
q.push(NULL);
}else{
int value=p->val;
if(value<) {res.push_back('-');value=-value;}
stack<char> s;
if(value==) s.push('');
while(value){
int e=value%;
s.push(e+'');value=value/;
}
while(!s.empty()){
res.push_back(s.top());s.pop();
}
q.push(p->left);
q.push(p->right);
if(p->left||p->right) flag=;
}
res.push_back('/');
}
}
cout<<res<<endl;
return res;
} // Decodes your encoded data to tree.
TreeNode* deserialize(string data) {
if(data.size()==) return NULL;
if(data.size()==&&data[]=='#')return NULL;
int len=data.size();
vector<TreeNode*> v;
for(int i=;i<len;i++){
if(data[i]=='/')continue;
TreeNode* p=NULL; if(data[i]!='#'){
int value=;
int flag=;
if(data[i]=='-') {flag=-;i++;}
while(data[i]!='/'){
value=*value+data[i]-'';
i++;
}
value=flag*value;
p=new TreeNode(value);
} v.push_back(p);
}
for(int i=;i<(v.size()-)/;i++){
if(v[i]!=NULL){
v[i]->left=v[*i+];
v[i]->right=v[*i+];
}
}
return v[];
}
}; // Your Codec object will be instantiated and called as such:
// Codec codec;
// codec.deserialize(codec.serialize(root));

测试例子如下:

样例通过为47/48,一个深度为1000的偏二叉树没有通过;

leetcode 297二叉树的序列化与反序列化的更多相关文章

  1. Java实现 LeetCode 297 二叉树的序列化与反序列化

    297. 二叉树的序列化与反序列化 序列化是将一个数据结构或者对象转换为连续的比特位的操作,进而可以将转换后的数据存储在一个文件或者内存中,同时也可以通过网络传输到另一个计算机环境,采取相反方式重构得 ...

  2. Leetcode 297.二叉树的序列化和反序列化

    二叉树地序列化和反序列化 序列化是将一个数据结构或者对象转换为连续的比特位的操作,进而可以将转换后的数据存储在一个文件或者内存中,同时也可以通过网络传输到另一个计算机环境,采取相反方式重构得到原数据. ...

  3. 【LeetCode】297. 二叉树的序列化与反序列化

    297. 二叉树的序列化与反序列化 知识点:二叉树:递归 题目描述 序列化是将一个数据结构或者对象转换为连续的比特位的操作,进而可以将转换后的数据存储在一个文件或者内存中,同时也可以通过网络传输到另一 ...

  4. 297 Serialize and Deserialize Binary Tree 二叉树的序列化与反序列化

    序列化是将一个数据结构或者对象转换为连续的比特位的操作,进而可以将转换后的数据存储在一个文件或者内存中,同时也可以通过网络传输到另一个计算机环境,采取相反方式重构得到原数据.请设计一个算法来实现二叉树 ...

  5. [Java]LeetCode297. 二叉树的序列化与反序列化 | Serialize and Deserialize Binary Tree

    Serialization is the process of converting a data structure or object into a sequence of bits so tha ...

  6. lintcode : 二叉树的序列化和反序列化

    题目 二叉树的序列化和反序列化 设计一个算法,并编写代码来序列化和反序列化二叉树.将树写入一个文件被称为“序列化”,读取文件后重建同样的二叉树被称为“反序列化”. 如何反序列化或序列化二叉树是没有限制 ...

  7. 二叉树的序列化和反序列化(Java)

    请实现两个函数,分别用来序列化和反序列化二叉树 序列化就是将二叉树以字符串输出,反序列化:根据自己输出的字符串,构建二叉树. 这里先序遍历输出,且为了方便反序列化,各个节点","隔 ...

  8. [LintCode] Serialize and Deserialize Binary Tree(二叉树的序列化和反序列化)

    描述 设计一个算法,并编写代码来序列化和反序列化二叉树.将树写入一个文件被称为“序列化”,读取文件后重建同样的二叉树被称为“反序列化”. 如何反序列化或序列化二叉树是没有限制的,你只需要确保可以将二叉 ...

  9. [LeetCode] 297. Serialize and Deserialize Binary Tree 二叉树的序列化和反序列化

    Serialization is the process of converting a data structure or object into a sequence of bits so tha ...

随机推荐

  1. 从程序员小仙飞升上神,java技术开发要如何实现?

    新霸哥是一个专业从事java开发的,近期,新霸哥发现很多的朋友在问,从程序员小仙飞升上神难吗?在此新霸哥将为你详细的介绍,下面新霸哥将从新手入门和老司机进阶多方面详细的为大家介绍一下. 说起java首 ...

  2. 【异常】Reason: Executor heartbeat timed out after 140927 ms

    1 详细异常 ERROR scheduler.JobScheduler: Error running job streaming job ms. org.apache.spark.SparkExcep ...

  3. 架构师成长之路5.7-Saltstack数据系统

    点击架构师成长之路 架构师成长之路5.7-Saltstack数据系统 1. Saltstack的两种数据系统 Grains Pollars 2. Saltstack数据系统---Grains Grai ...

  4. html 中 图片和文字一行 垂直居中对齐

    效果:      代码:<div><img src='img/point_icon.png' width='35px' height='35px' style='float: lef ...

  5. [uboot] (第三章)uboot流程——uboot-spl代码流程 后续2018版本分析

    board_init_f在/u-boot-2018.07-fmxx/arch/arm/mach-fmxx/spl.c中定义 board_init_f之后,和转载的部分有出入: u-boot-2018. ...

  6. PropertyPlaceholderConfigurer implements BeanFactoryPostProcessor

    BeanFactoryPostProcessor的应用 最常用的一个应用就是org.springframework.beans.factory.config.PropertyPlaceholderCo ...

  7. java内存泄漏与处理

    内存溢出 out of memory,是指程序在申请内存时,没有足够的内存空间供其使用,出现out of memory: 内存泄露 memory leak,是指程序在申请内存后,无法释放已申请的内存空 ...

  8. Acwing-283-多边形(区间DP)

    链接: https://www.acwing.com/problem/content/285/ 题意: "多边形游戏"是一款单人益智游戏. 游戏开始时,给定玩家一个具有N个顶点N条 ...

  9. TCP下的套接字服务端实现并发 作业题

    # 服务端 import socket from threading import Thread """ 服务端 1.要有固定的IP和PORT 2.24小时不间断提供服务 ...

  10. JAVA笔记9-多态(动态绑定、池绑定)

    1.动态绑定:执行期间(而非编译期间)判断所引用对象的实际类型,根据实际的类型调用相应方法. 2.多态存在的三个必要条件(同时):继承.重写.父类引用指向子类对象. 这三个条件满足后,当调用父类中被重 ...