地址 https://www.acwing.com/problem/content/46/

请实现两个函数,分别用来序列化和反序列化二叉树。

您需要确保二叉树可以序列化为字符串,并且可以将此字符串反序列化为原始树结构。

样例

你可以序列化如下的二叉树

   / \

     / \

为:"[8, 12, 2, null, null, 6, 4, null, null, null, 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 Solution {
public: string str;
// Encodes a tree to a single string.
string serialize(TreeNode* root) {
if (root == NULL) {
if (!str.empty()) {
str += ',';
}
str += "NULL";
return str;
} if (!str.empty()) {
str += ',';
}
str += to_string(root->val); serialize(root->left);
serialize(root->right); //cout << "str = " << str<<endl;
return str;
} string ParseString( string& data, int& val)
{
string ret; if (data[] == ',') {
data = data.substr();
} if (data.empty()) {
// assert(0);
val = -;
return "";
}
else if (data[] == 'N') {
val = -;
ret = data.substr();
}
else if (data[] >= '' || data[] <= '') {
int idx = ;
while (data[idx] != ',' && idx < data.size()) {
idx++;
}
string numstr = data.substr(, idx );
ret = data.substr(idx );
val = atoi(numstr.c_str());
}
else {
//assert(0);
}
if (ret[] == ',') {
ret = ret.substr();
} return ret;
}
//8,12,NULL,NULL,2,6,NULL,NULL,4,NULL,NULL TreeNode* deserializeInner(string& data)
{
if (data.empty() || data == "NULL")
return NULL; if (data[] == ',') {
data = data.substr();
}
int val = -;
string nextStr = ParseString(data, val);
data = nextStr;
if (val == -) {
return NULL;
} TreeNode* root = (TreeNode*)malloc(sizeof(TreeNode));
memset(root, , sizeof(TreeNode));
root->val = val; root->left = deserializeInner(data);
root->right = deserializeInner(data); return root;
} // Decodes your encoded data to tree.
TreeNode* deserialize(string data) {
if (data.empty() ||data == "NULL")
return NULL;
//cout << data<<endl;
int val = -;
string nextStr = ParseString(data, val); TreeNode* root = (TreeNode*)malloc(sizeof(TreeNode));
memset(root, , sizeof(TreeNode));
root->val = val; root->left = deserializeInner(nextStr);
root->right = deserializeInner(nextStr);
return root;
} };

有点乱 待优化

最新文章

  1. tungsten抽取和应用mysql binlog
  2. Des与3Des加密解密
  3. Arnold AtArray API Test
  4. 关于蜂窝物联技术 NBIoT 的一些观点
  5. Xcode 8 在XIB中布局View尺寸1000*1000
  6. Azure开发者任务之六:使用WCF Service Web Role
  7. UIWebView的简单使用
  8. c语言字符串操作,及常用函数
  9. ubuntu 防火墙 添加策略 解决mysql远程访问问题
  10. .net处理JSON简明教程
  11. Hibernate的BaseDao辅助类
  12. Yii2权威指南中文版及众包翻译平台
  13. 碰撞缓冲效果的导航条 js
  14. kotlin语言使用初体验(一)
  15. python 文件的写删改
  16. vue学习笔记2
  17. 主机名变成bogon?连不上mysql?你需要看下这篇文章
  18. 使用 Flask-Docs 自动生成 Api 文档
  19. 1A
  20. 【菜鸟】RESTful 架构详解

热门文章

  1. C# transfer local file to remote server based on File.Copy
  2. Java实现抢红包功能
  3. 【Beta阶段】第十二周Scrum会议
  4. C#&amp;.Net干货分享- 构建Spire-Office相关Helper操作Word、Excel、PDF等
  5. Vant-Weap通过事件获取值
  6. Linux基础 —基础要点
  7. MyBatis核心对象之StatementHandler
  8. MongoDB数据库常用SQL命令 — MongoDB可视化工具Robo 3T
  9. redis缓存穿透,缓存击穿,缓存雪崩
  10. Python的生成器和生成器表达式