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所得的字符之后添加一个' , ' ...
随机推荐
- RESTful 架构风格
在移动互联网的大潮下,『微服务』的概念也越来越被大家接受并应用于实践,日益增多的web service逐渐统一于RESTful 架构风格,如果开发者对RESTful 架构风格不甚了解,则开发出的所谓R ...
- NFS挂载遇到的问题
问题描述:生产环境中需要经常运用NFS挂载,就在测试环境中测试一下,将服务器中192.168.1.4 /u01/app/oracle/product/11.2.0/dbhome_1/dbs 挂载到1 ...
- springboot+quartz+数据库存储
Spring整合Quartz a.quartz调度框架是有内置表的 进入quartz的官网http://www.quartz-scheduler.org/,点击Downloads, 下载后在目录\do ...
- io流追加到一个文件中信息比如日志
package com.yh.day02.arrays; import java.io.File;import java.io.FileInputStream;import java.io.FileN ...
- javascript---简介的切换图片效果。
<!--切换图片--> <img src="img/9.gif" alt="" id="img"> <butt ...
- tensorflow和pytorch教程
https://github.com/dragen1860/Deep-Learning-with-TensorFlow-book
- Web安全测试学习笔记-DVWA-存储型XSS
XSS(Cross-Site Scripting)大致分为反射型和存储型两种,之前对XSS的认知仅停留在如果网站输入框没有屏蔽类似<script>alert('ok')</scrip ...
- Delphi xe 10.3.2-快递接口封装-【快递鸟(即时查询和单号识别)】
编译环境:Windows 7 +Delphi xe 10.3.2 封装了快递鸟接口,注意的坑:MD5要转为小写. function TKDniaoAPI.StrtoMd5(const str: str ...
- redis的embstr编码
问题来了 今天在看书籍<Redis设计与实现>的时候,在8.2字符串对象里面写到 如果字符串对象保存的是一个字符串值, 并且这个字符串值的长度大于 39 字节, 那么字符串对象将使用一个简 ...
- 上手Neo4j
Neo4j是什么 软件安装及常用的配置选项介绍 下载 wget https://neo4j.com/artifact.php?name=neo4j-community-3.5.3-unix.tar.g ...