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

 
二叉树的序列化是指:把一棵二叉树按照某种遍历方式的结果以某种格式保存为字符串,从而使得内存中建立起来的二叉树可以持久保存。序列化可以基于先序、中序、后序、层序的二叉树遍历方式来进行修改,序列化的结果是一个字符串,序列化时通过 某种符号表示空节点(#),以 ! 表示一个结点值的结束(value!)。

二叉树的反序列化是指:根据某种遍历顺序得到的序列化字符串结果str,重构二叉树。
 
/*
struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
TreeNode(int x) :
val(x), left(NULL), right(NULL) {
}
};
*/
class Solution {
public:
//序列化
void do_Serialize(TreeNode *root, string &s)
{
if(root == nullptr)
{
s += '#';
s += ',';
return;
}
//std::to_string() 数值转换字符串
s += to_string(root->val);
s += ',';
do_Serialize(root->left,s);
do_Serialize(root->right,s);
}
char* Serialize(TreeNode *root)
{
if(root == nullptr)
{
return nullptr;
}
string str = "";
do_Serialize(root,str);
//返回值是char *
char *ret = new char[str.length() + 1]; //'\0'
strcpy(ret, str.c_str());
return ret;
} //反序列化
TreeNode* do_Deserialize(string &s)
{
if(s.empty())
{
return nullptr;
}
if (s[0] == '#')
{
s = s.substr(2); //从s中去掉#,
return nullptr;
}
TreeNode *ret = new TreeNode(stoi(s)); s = s.substr(s.find_first_of(',') + 1); ret->left = do_Deserialize(s);
ret->right = do_Deserialize(s);
return ret;
}
TreeNode* Deserialize(char *str)
{
if(str == nullptr)
{
return nullptr;
}
string s(str);
return do_Deserialize(s);
}
};

  

 

【剑指Offer】【树】序列化二叉树的更多相关文章

  1. 力扣 - 剑指 Offer 37. 序列化二叉树

    目录 题目 思路 代码 复杂度分析 题目 剑指 Offer 37. 序列化二叉树 思路 序列化其实就是层序遍历 但是,要能反序列化的话,前.中.后.层序遍历是不够的,必须在序列化时候保存所有信息,这样 ...

  2. 【剑指Offer】序列化二叉树 解题报告(Python)

    [剑指Offer]序列化二叉树 解题报告(Python) 标签(空格分隔): 剑指Offer 题目地址:https://www.nowcoder.com/ta/coding-interviews 题目 ...

  3. 剑指 Offer 37. 序列化二叉树 + 二叉树的层次遍历

    剑指 Offer 37. 序列化二叉树 Offer_37 题目描述 题目解析 本题主要考察的就是二叉树的层次遍历. 层次遍历时可以根据二叉树的特点将空结点也进栈. 反序列化时同样可以根据层次遍历的思路 ...

  4. 【Java】 剑指offer(37) 序列化二叉树

    本文参考自<剑指offer>一书,代码采用Java语言. 更多:<剑指Offer>Java实现合集   题目 请实现两个函数,分别用来序列化和反序列化二叉树. 思路 一般情况下 ...

  5. Go语言实现:【剑指offer】序列化二叉树

    该题目来源于牛客网<剑指offer>专题. 请实现两个函数,分别用来序列化和反序列化二叉树. 二叉树的序列化是指:把一棵二叉树按照某种遍历方式的结果以某种格式保存为字符串,从而使得内存中建 ...

  6. 剑指offer:序列化二叉树

    题目描述: 请实现两个函数,分别用来序列化和反序列化二叉树 思路分析: 这里一开始有点不明白题目的意思.实际上序列化应该指把二叉树用某种编码方式表示,这里一般是字符串的形式.而反序列就是将之前生成的序 ...

  7. 剑指Offer 61. 序列化二叉树 (二叉树)

    题目描述 请实现两个函数,分别用来序列化和反序列化二叉树 题目地址 https://www.nowcoder.com/practice/cf7e25aa97c04cc1a68c8f040e71fb84 ...

  8. 每日一题 - 剑指 Offer 37. 序列化二叉树

    题目信息 时间: 2019-06-29 题目链接:Leetcode tag:序列化 二叉树 队列 难易程度:中等 题目描述: 请实现两个函数,分别用来序列化和反序列化二叉树. 示例: 1 / \ 2 ...

  9. 剑指offer——31序列化二叉树

    题目描述 请实现两个函数,分别用来序列化和反序列化二叉树   二叉树的序列化是指:把一棵二叉树按照某种遍历方式的结果以某种格式保存为字符串,从而使得内存中建立起来的二叉树可以持久保存.序列化可以基于先 ...

  10. [剑指Offer] 61.序列化二叉树

    题目描述 请实现两个函数,分别用来序列化和反序列化二叉树 /* struct TreeNode { int val; struct TreeNode *left; struct TreeNode *r ...

随机推荐

  1. DevSecOps 需要知道的十大 K8s 安全风险及建议

    Kubernetes (K8s)是现代云原生世界中的容器管理平台.它实现了灵活.可扩展地开发.部署和管理微服务.K8s 能够与各种云提供商.容器运行时接口.身份验证提供商和可扩展集成点一起工作.然而 ...

  2. Go+beego接入OSS上传

    路由 f, h, err := c.GetFile("uploadFile") if err != nil { logx.Error("getfile err " ...

  3. Java学习笔记:2022年1月9日(其一)

    Java学习笔记:2022年1月9日(其一) 摘要:这篇笔记主要记录了Java运行时中的两种变量.以及参数的两种传递方式. 目录 Java学习笔记:2022年1月9日(其一) 1.不同变量的详细探讨 ...

  4. 毫米波雷达 TI IWR1443 初体验

    文章目录 1 前言 2 准备工作 2.1 mmWave SDK 2.2 Code Composer Studio(CCS) 2.3 Uniflash 2.4 MATLAB runtime 2.5 TI ...

  5. Scrapy爬虫框架快速入门

    安装scrapy pip install scrapy -i https://pypi.douban.com/simple/ 安装过程可能遇到的问题 版本问题导致一些辅助库没有安装好,需要手动下载并安 ...

  6. [数据结构]KMP算法(含next数组详解)

    字符串匹配问题 给定一个字符串 s 和一个要匹配的模式串 p.模式串 p 有可能在 s 中多次出现,请求出模式串 p 在 s 中所有出现的起始位置. 暴力匹配算法 BF 算法思路 在面对字符串匹配问题 ...

  7. Bootstrap Blazor Viewer 图片浏览器 组件更新, 支持流转图片(ImageFromStream), 用于本地项目例如 MAUI Blazor,Blazor hybrid

    示例: https://blazor.app1.es/viewer 使用方法: 1.nuget包 BootstrapBlazor.Viewer 2._Imports.razor 文件 或者页面添加 添 ...

  8. Java 进阶P-5.3+P-5.4

    封装 增加可扩展性 可以运行的代码!=良好的代码 对代码做维护的时候最能看出代码的质量 如果想要增加一个方向,如down或up 用封装来降低耦合 Room类和Game类都有大量的代码和出口相关 尤其是 ...

  9. 【随笔记】SiliconLabs Android aar 库使用

    一.导入库文件 1. 拷贝以下两个文件到工程的 libs 目录下 ble_mesh-android_api_high-release.aar ble_mesh-android_api_low-rele ...

  10. 【学习笔记】开源库之 - sigslot (在解决浅拷贝问题的基础上增加信号拦截功能)

    前言说明 在文中<[学习笔记]开源库之 - sigslot (提供该库存在对象拷贝崩溃问题的解决方案)>已经介绍过 sigslot ,此文主要应用在实际的工作项目中时,发现会有拦截信号的需 ...