acwing 50. 序列化二叉树
地址 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;
} };
有点乱 待优化
acwing 50. 序列化二叉树的更多相关文章
- 剑指Offer 61. 序列化二叉树 (二叉树)
题目描述 请实现两个函数,分别用来序列化和反序列化二叉树 题目地址 https://www.nowcoder.com/practice/cf7e25aa97c04cc1a68c8f040e71fb84 ...
- 剑指offer(61)序列化二叉树
题目描述 请实现两个函数,分别用来序列化和反序列化二叉树 题目分析 首先拿到题目时候,我先想到的是什么是序列化二叉树?序列化主要就是在前后端交互时候需要转换下,毕竟网络传输的是流式数据(二进制或者文本 ...
- 《剑指offer》第三十七题(序列化二叉树)
// 面试题37:序列化二叉树 // 题目:请实现两个函数,分别用来序列化和反序列化二叉树. #include "BinaryTree.h" #include <iostre ...
- 剑指Offer——序列化二叉树
题目描述: 请实现两个函数,分别用来序列化和反序列化二叉树 分析: 先序遍历可以用来序列化二叉树,序列化过程中,我们用“0xFFFFFFFF”表示结点为NULL. 反序列化便很简单,遇到“0xFFFF ...
- 剑指Offer的学习笔记(C#篇)-- 序列化二叉树
题目描述 请实现两个函数,分别用来序列化和反序列化二叉树 一 . 理解题意 二叉树的序列化,是将一个结构化的东西变成扁平化的字符串,序列化二叉树或者是反序列化二叉树就是二叉树和扩展二叉树遍历序列之间的 ...
- 【剑指Offer学习】【面试题62:序列化二叉树】
题目:请实现两个函数,分别用来序列化和反序列化二叉树. 解题思路 通过分析解决前面的面试题6.我们知道能够从前序遍历和中序遍历构造出一棵二叉树.受此启示.我们能够先把一棵二叉树序列化成一个前序遍历序列 ...
- Same Tree 序列化二叉树
https://oj.leetcode.com/problems/same-tree/ Given two binary trees, write a function to check if the ...
- 剑指offer:序列化二叉树
题目描述: 请实现两个函数,分别用来序列化和反序列化二叉树 思路分析: 这里一开始有点不明白题目的意思.实际上序列化应该指把二叉树用某种编码方式表示,这里一般是字符串的形式.而反序列就是将之前生成的序 ...
- 剑指offer---4、序列化二叉树
剑指offer---4.序列化二叉树 一.总结 一句话总结: 1. 对于序列化:使用前序遍历,递归的将二叉树的值转化为字符,并且在每次二叉树的结点不为空时,在转化val所得的字符之后添加一个' , ' ...
随机推荐
- What happened when new an object in JVM ?
原文链接:https://www.javaspring.net/java/what-happened-when-new-an-object-in-jvm I. Introduction As you ...
- Eclipse与IDEA配置tomcat
在eclipse中配置tomcat 打开servers窗口点击新建服务器 选择apache下对应版本,填写服务器名(自定义) 点击browse指定tomcat解压路径,点击finish 在server ...
- JavaScript for 、for...of 、for...in 等 iteration 效率测试
由于不同浏览器,不同版本性能不一,且控制台本质是是套用了一大堆eval,沙盒化程度高,所以需使用node环境测试来提高准确性 // 准备待测数组 const NUM = 1e7; let arr = ...
- 【iOS】Swipe与Pan区别分析
By definition, a swipe gesture is necessarily also a pan gesture -- both involve translational movem ...
- C++中的try throw catch 异常处理
今天在开发过程中调用一个库函数结果库函数有throw操作,当前代码没有对throw进行捕获操作,导致进程在main 函数中捕获到异常导致进程crash.所以借此记录下c++关于try,throw,ca ...
- Docker 底层技术与端口映射
容器底层实现技术 1.cgroup 实现了资源的限额:CPU,内存,硬盘 cgroup使用 docker run -d -m 100M httpd 2.namespace 实现了资源隔离 name ...
- avd manger创建的虚拟机启动不起来,或者启动起来后黑屏
最近鼓捣安卓虚拟机,整的都差点重装系统,刚开始下载了genymotion_vbox,装完以后要在vbox中导入一个虚拟机,结果我导入完,虚拟机怎么也启动不了,然后各种找办法无果,最后重启电脑发现电脑也 ...
- python中json与pickle的简要说明
import json ======> 注意:不同语言之间通用但不能传输对象类型 该模块中最重要的方法: 1.json.dump(‘python数据’,‘json文件’) # 将pyt ...
- 加权无向图 最小生成树 Prim算法 延迟版和即时版 村里修路该先修哪
本次要解决的问题是:你们村里那些坑坑洼洼的路,到底哪些路才是主干道? 小明:肯定是哪里都能到得了,并且去哪里都相对比较近,并且被大家共用程度高的路是啊! 具体是哪几条路呢?今天就可以给出准确答案 最小 ...
- 使用webstrom开发小程序要做的设置
1.关闭rpx的错误提示 在setting里面 -->搜索inspections --> 在右侧找到invalid CSS property value 把对勾划掉