acwing 50. 序列化二叉树
2024-10-18 10:11:33
地址 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;
} };
有点乱 待优化
最新文章
- tungsten抽取和应用mysql binlog
- Des与3Des加密解密
- Arnold AtArray API Test
- 关于蜂窝物联技术 NBIoT 的一些观点
- Xcode 8 在XIB中布局View尺寸1000*1000
- Azure开发者任务之六:使用WCF Service Web Role
- UIWebView的简单使用
- c语言字符串操作,及常用函数
- ubuntu 防火墙 添加策略 解决mysql远程访问问题
- .net处理JSON简明教程
- Hibernate的BaseDao辅助类
- Yii2权威指南中文版及众包翻译平台
- 碰撞缓冲效果的导航条 js
- kotlin语言使用初体验(一)
- python 文件的写删改
- vue学习笔记2
- 主机名变成bogon?连不上mysql?你需要看下这篇文章
- 使用 Flask-Docs 自动生成 Api 文档
- 1A
- 【菜鸟】RESTful 架构详解
热门文章
- C# transfer local file to remote server based on File.Copy
- Java实现抢红包功能
- 【Beta阶段】第十二周Scrum会议
- C#&;.Net干货分享- 构建Spire-Office相关Helper操作Word、Excel、PDF等
- Vant-Weap通过事件获取值
- Linux基础 —基础要点
- MyBatis核心对象之StatementHandler
- MongoDB数据库常用SQL命令 — MongoDB可视化工具Robo 3T
- redis缓存穿透,缓存击穿,缓存雪崩
- Python的生成器和生成器表达式