我又又又开始刷题了。。。
不过这么一天两个小时,其实还是蛮浪费时间的,毕竟我对C++其实并不是特别熟悉,所以很多时候花费在语法上面的时间,就很磨人。



序列化是将一个数据结构或者对象转换为连续的比特位的操作,进而可以将转换后的数据存储在一个文件或者内存中,同时也可以通过网络传输到另一个计算机环境,采取相反方式重构得到原数据。请设计一个算法来实现二叉树的序列化与反序列化。这里不限定你的序列 / 反序列化算法执行逻辑,你只需要保证一个二叉树可以被序列化为一个字符串并且将这个字符串反序列化为原始的树结构。示例: 你可以将以下二叉树:1/ \2   3/ \4   5序列化为 "[1,2,3,null,null,4,5]"提示: 这与 LeetCode 目前使用的方式一致,详情请参阅 LeetCode 序列化二叉树的格式。你并非必须采取这种方式,你也可以采用其他的方法解决这个问题。说明: 不要使用类的成员 / 全局 / 静态变量来存储状态,你的序列化和反序列化算法应该是无状态的。// Your Codec object will be instantiated and called as such:
// Codec codec;
// codec.deserialize(codec.serialize(root));来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/serialize-and-deserialize-binary-tree
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

其实,在树的访问上面,我并没有花费太大的时间,时间主要用来 code 字符串处理的那一部分,以及测试自己的字符串分割是否正确,还改了好几次。这就很考验耐心的了,的确贼烦人哈。
我的思路很简单:层次遍历读出,层次遍历放入
层次遍历读出是一件很容易的事情,但是层次遍历放入有点困难,因为你不可能提前知道当前节点的左右子树的情况,所以呢,我就每个节点位置直接生成左右子树,解决了这个问题。
Code:

/*** 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:string concat(vector<string> items) {/*将 vector 转化为 字符串*/string str_tree = "[";//去最后的 nullint size = items.size();for(int i=items.size()-1; i>=0; i--)if(items[i]=="null")size--;elsebreak;for(int i=0; i<size; i++) {str_tree += items[i];if(i!=size-1)str_tree += ",";}return str_tree+"]";}// Encodes a tree to a single string.string serialize(TreeNode* root) {if(root==NULL)return "[]";queue<TreeNode* > sque;vector<string> items;//生成序列,层次遍历sque.push(root);while(sque.empty() != true) {TreeNode* p = sque.front();if(p!=NULL)items.push_back(to_string(p->val)); elseitems.push_back("null");//维护队列if(p!=NULL) {sque.push(p->left);sque.push(p->right); }sque.pop();}return concat(items);}// Decodes your encoded data to tree.TreeNode* deserialize(string data) {//将数 序列为 vectorvector<string> items;string temp = "";for(int i=0; i<data.size(); i++) {if(data[i]=='[')continue;else if(data[i]==']' && temp!="")items.push_back(temp);else if(data[i]==','){items.push_back(temp);temp = "";}elsetemp += data[i];}//建立树int idx = 0;int size = items.size();queue<TreeNode*> sque;TreeNode* root = NULL;if(idx < size) {root = new TreeNode;root->val = atoi(items[idx++].c_str());}elsereturn root;sque.push(root);while(sque.empty()!=true && idx<size) {TreeNode* p = sque.front();//左叶if(items[idx]!="null") {p->left = new TreeNode;p->left->val = atoi(items[idx].c_str());sque.push(p->left); //队尾入}elsep->left = NULL;idx++;if(idx < size) ;else break;//右叶if(items[idx]!="null") {p->right = new TreeNode;p->right->val = atoi(items[idx].c_str());sque.push(p->right);}elsep->right = NULL;idx++;sque.pop(); //队首出}return root;}
};

leetcode-017-297. 二叉树的序列化与反序列化相关推荐

  1. leetcode第297——二叉树的序列化与反序列化(层次遍历)

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

  2. leetcode:297. 二叉树的序列化与反序列化

    题目来源 leetcode 题目描述 . struct TreeNode {int val;TreeNode *left;TreeNode *right;TreeNode() : val(0), le ...

  3. 【LeetCode】【HOT】297. 二叉树的序列化与反序列化(BFS)

    [LeetCode][HOT]297. 二叉树的序列化与反序列化 文章目录 [LeetCode][HOT]297. 二叉树的序列化与反序列化 package hot;import java.util. ...

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

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

  5. 【leetcode】二叉树,297二叉树的序列化与反序列化

    297. 二叉树的序列化与反序列化 前言 题目难度:困难 一.题目描述 二.前序遍历解法 三.后序遍历解法 四.中序遍历解法 五.层级遍历解法 前言 如果你看过下面这几篇,那这道题应该对你来说信手拈来 ...

  6. LeetCode 297. 二叉树的序列化与反序列化 | Python

    文章目录 297. 二叉树的序列化与反序列化 题目 解题思路 代码实现 实现结果 总结 297. 二叉树的序列化与反序列化 题目来源:力扣(LeetCode)https://leetcode-cn.c ...

  7. LeetCode Java刷题笔记—297. 二叉树的序列化与反序列化

    297. 二叉树的序列化与反序列化 请实现两个函数,分别用来序列化和反序列化二叉树.这里不限定你的序列 / 反序列化算法执行逻辑,你只需要保证一个二叉树可以被序列化为一个字符串并且将这个字符串反序列化 ...

  8. golang力扣leetcode 297.二叉树的序列化与反序列化

    297.二叉树的序列化与反序列化 297.二叉树的序列化与反序列化 题解 代码 297.二叉树的序列化与反序列化 297.二叉树的序列化与反序列化 题解 题目:给你一个二叉树,序列化从一个string ...

  9. LeetCode 297. 二叉树的序列化与反序列化(前序遍历层序遍历)

    文章目录 1. 题目 2. 解题 2.1 前序遍历 2.2 层序遍历 1. 题目 序列化是将一个数据结构或者对象转换为连续的比特位的操作,进而可以将转换后的数据存储在一个文件或者内存中,同时也可以通过 ...

  10. LeetCode 297. 二叉树的序列化与反序列化

    题目链接: 力扣https://leetcode.cn/problems/serialize-and-deserialize-binary-tree/ [分析]序列化的时候很简单,任意的一种二叉树遍历 ...

最新文章

  1. 全方位,多角度理解ThreadLocal
  2. 关于容器的三件事,你知道吗?
  3. 【云周刊】第178期:阿里云以生态联盟推动全球市场,牵手Bolloré集团全球合作...
  4. 表格元素的快捷获取以及隔行变色、鼠标移入变色案例
  5. 软件外包项目管理的经验感悟
  6. 基于query语句解析mysql工作原理
  7. mysql分隔符声明_MySQL分隔符发生错误时?
  8. 敏捷开发中的Code Review
  9. 计算机活动感悟怎么写,计算机教学心得体会范文五篇.doc
  10. xenserver6.2 内存leak故障处理
  11. PowerShell因为在此系统中禁止执行脚本解决方法
  12. PHP后台数据处理及与web端进行数据交互
  13. 基于Vue的车辆租赁管理系统设计与实现
  14. react17.x+MDUI实现todo小案例,react动态添加与删除元素属性
  15. 吴恩达机器学习笔记目录
  16. Tokenized的设计哲学(三)
  17. elasticsearch报错:bootstrap checks failed. You must address the points described in the following [1]
  18. 118句最新QQ励志个性签名
  19. 输入一个大于3的整数n,判定它是否为素数。例题5.9
  20. FileZilla使用密钥文件连接linux服务器上传文件

热门文章

  1. echarts柱状图加上数量
  2. Neutron的Web Server启动过程中的关键参数
  3. 程序开发中的软实力和硬实力
  4. Django中引入bootstrap的方法
  5. 2021年安徽省大数据与人工智能应用竞赛本科组(省赛)
  6. 【智能驾驶】汽车智能化行业深度报告
  7. educoder:第3关:嵌套循环 - 跃迁能量表
  8. linux 解压参数 zxvf,在linux下面解压用的zxpf是什么意思,它跟zxvf有啥区别
  9. 一个图形数据维护工具架构设计
  10. 记录配置Jupyter kernels