热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

技术日志:297.二叉树的编码与解码(BinaryTreeSerializationandDeserialization)

本文由编程笔记#小编为大家整理,主要介绍了297. 二叉树的序列化与反序列化(Serialize and Deserialize Binary Tree)相关的知识,希望对你有一定的参考价值。题目描述
本文由编程笔记#小编为大家整理,主要介绍了297. 二叉树的序列化与反序列化(Serialize and Deserialize Binary Tree)相关的知识,希望对你有一定的参考价值。

题目描述:

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

请设计一个算法来实现二叉树的序列化与反序列化。这里不限定你的序列 / 反序列化算法执行逻辑,你只需要保证一个二叉树可以被序列化为一个字符串并且将这个字符串反序列化为原始的树结构。

示例: 

你可以将以下二叉树:

1
/
2 3
/
4 5

序列化为 "[1,2,3,null,null,4,5]"

解题思路:

  这道题的方法很多,我使用的是先序遍历,并且用‘,’分割不同结点。如果遇到空结点就用null的首字母‘n’表示。解码时先解析字符串到一个数组中,然后同样先序遍历的顺序重新构建二叉树。

  代码如下:

/**
* 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:
// Encodes a tree to a single string.
void en_dfs(TreeNode* p, string& res) {
if (!p) {
res.append(
"n,");
return ;
}
res.append(to_string(p
->val)).append(",");
en_dfs(p
->left, res);
en_dfs(p
->right, res);
}
string serialize(TreeNode* root) {
string res;
en_dfs(root, res);
return res;
}
// Decodes your encoded data to tree.
void de_dfs(TreeNode*& p, int& i, vector<int>& number) {
if (number[i] == numeric_limits<int>::max()) {
p
= nullptr;
return ;
}
p
= new TreeNode(number[i]);
de_dfs(p
->left, ++i, number);
de_dfs(p
->right, ++i, number);
}
TreeNode
* deserialize(string data) {
TreeNode
* root = nullptr;
vector
<int> number;
int i = 0;
while (i != data.size()) {
int j = data.find(,, i);
string s = data.substr(i, j - i);
if (s == "n")
number.push_back(numeric_limits
<int>::max());
else
number.push_back(stoi(s));
i
= j + 1;
}
i
= 0;
de_dfs(root, i, number);
return root;
}
};
// Your Codec object will be instantiated and called as such:
// Codec codec;
// codec.deserialize(codec.serialize(root));

 


推荐阅读
  • OpenCV 2.4.9 源码解析:级联分类器的错误率与尺寸分析 ... [详细]
  • C/C++利用栈和队列实现停车场管理系统【C++教程】
    数据结构的课程设计一般都不是很好理解,今天小编为大家总结了一下c和c++版本的常见栈和队列的的停车场管理程序,需要 ... [详细]
  • 针对给定的二叉树,本文详细解析了如何实现从左至右、逐层遍历节点值的算法,并探讨了优化方法,以提高遍历效率和代码可读性。 ... [详细]
  • 在上篇文章的基础上,本文将继续探讨 Linux 设备驱动中的设备模型与 `devicedriverbus` 机制。在将设备注册到总线之前,需要先创建 `device` 对象。可以通过静态定义 `device` 结构体变量,并调用 `device_register` 函数来完成这一过程。此外,文章还将详细解析设备模型的内部工作机制,以及 `devicedriverbus` 机制如何实现设备与驱动的自动匹配和管理。 ... [详细]
  • 算术表达式分析与解析技术初探
    本文初步探讨了算术表达式的分析与解析技术,针对作者在职业转型过程中发现自身算法基础薄弱的问题,决定在接下来的三个月内,系统地学习和掌握常用数据结构与算法,以提升个人技术能力。研究内容不仅涵盖了基本的算术表达式解析方法,还深入讨论了其在实际应用中的优化策略,为相关领域的进一步研究奠定了基础。 ... [详细]
  • CatchThatCowTimeLimit:50002000MS(JavaOthers)MemoryLimit:3276832768K(JavaOt ... [详细]
  • Oracle培训(三十七)——深入解析Hibernate第三章:实体关联关系映射详解
    在本节Oracle培训中,我们将深入探讨Hibernate第三章的内容,重点讲解实体关联关系映射的详细知识点。首先,回顾了Hibernate的基本概念和映射基础,随后详细分析了不同类型的实体关联关系,包括一对一、一对多和多对多关系的映射方法及其应用场景。通过具体的示例和代码片段,帮助读者更好地理解和掌握这些复杂的映射技术。此外,还讨论了如何优化关联关系的性能,以及常见的问题和解决方案。 ... [详细]
  • 本文介绍了一个基于C++标准库实现的INI文件读写操作类。该类在现有网络资源的基础上进行了扩展和优化,增加了获取当前可执行文件路径和宽字节与多字节字符串转换的功能。通过这些增强功能,该类能够更好地适应各种应用场景,提高代码的可移植性和健壮性。具体实现细节请参见 `IniFileSTL.h` 文件。 ... [详细]
  • 深入解析数据结构与算法:基数排序的原理与应用
    本文详细探讨了基数排序(Radix Sort)的基本原理及其应用场景。作为一种非比较型整数排序算法,基数排序通过将元素按照位数分配到不同的桶中进行排序,最终合并各个桶中的元素得到有序序列。文章首先介绍了基数排序的核心思想和工作流程,随后通过具体代码示例展示了其实现过程。此外,还对基数排序在处理大规模数据集时的性能表现进行了测试,并讨论了在实际应用中需要注意的事项。 ... [详细]
  • 图像拼接技术深入解析:基于OpenCV 3.4的Stitching模块源码分析(下篇)
    本文继续深入探讨图像拼接技术,特别是在OpenCV 3.4的Stitching模块中的源码实现。通过与VLFeat的SIFT实现进行对比,详细分析了OpenCV在图像特征提取、匹配及拼接过程中的关键算法和技术细节,为读者提供了全面的技术解析和实践指导。 ... [详细]
  • 分析: 首先判断线段俩直线是否平行(或重合),如果是的话直接求。考虑4个端点到另外一条线段的距离,取最小值即可 ... [详细]
  • 【技术解析】深入探讨堆利用中的UAF漏洞及其影响 ... [详细]
  • 探索基础路径分析与优化策略 ... [详细]
  • Redis客户端使用指南与学习笔记
    本书基于Redis 3.0版本编写,虽然与后续版本存在一些差异,但仍详细介绍了Redis服务器的一对多客户端连接机制。书中不仅涵盖了基本的安装配置和命令操作,还深入探讨了数据结构、持久化策略及性能优化等高级主题,适合初学者和进阶用户参考学习。 ... [详细]
  • 掌握 esrally 三步骤:高效执行 Elasticsearch 性能测试任务
    自从上次发布 esrally 教程已近两个月,期间不断有用户咨询使用过程中遇到的各种问题,尤其是由于测试数据托管在海外 AWS 上,导致下载速度极慢。为此,本文将详细介绍如何通过三个关键步骤高效执行 Elasticsearch 性能测试任务,帮助用户解决常见问题并提升测试效率。 ... [详细]
author-avatar
pigone
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有