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

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

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

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

提示: 输入输出格式与 LeetCode 目前使用的方式一致,详情请参阅 LeetCode 序列化二叉树的格式。你并非必须采取这种方式,你也可以采用其他的方法解决这个问题。

  • 示例 1:

输入:root = [1,2,3,null,null,4,5]
输出:[1,2,3,null,null,4,5]

  • 示例 2:

输入:root = []
输出:[]

  • 示例 3:

输入:root = [1]
输出:[1]

  • 示例 4:

输入:root = [1,2]
输出:[1,2]
image.png

解题思路

序列化:使用先序遍历,使用特殊字符标记null节点,每个节点之间用“ ”间隔开
反序列化: 先将字符串中的节点提取成为数组,同样以先序遍历的方式遍历数组元素,生成节点

代码

/*** Definition for a binary tree node.* public class TreeNode {*     int val;*     TreeNode left;*     TreeNode right;*     TreeNode(int x) { val = x; }* }*/
public class Codec {public String serialize(TreeNode root) {StringBuilder s = new StringBuilder();toSerialize(root,s);return s.toString();}public void toSerialize(TreeNode root,StringBuilder stringBuilder) {if (root==null) {stringBuilder.append("x ");return;}stringBuilder.append(root.val).append(" ");toSerialize(root.left,stringBuilder);toSerialize(root.right,stringBuilder);}// Decodes your encoded data to tree.public TreeNode deserialize(String data) {String[] d = data.trim().split(" ");return toDeserialize(d);}int cur=0;public TreeNode toDeserialize(String[] data) {if (cur==data.length) return null;if (data[cur].equals("x")){cur++;return null;}TreeNode root = new TreeNode(Integer.parseInt(data[cur++]));TreeNode l=toDeserialize(data);TreeNode r=toDeserialize(data);root.left=l;root.right=r;return root;}
}// Your Codec object will be instantiated and called as such:
// Codec ser = new Codec();
// Codec deser = new Codec();
// TreeNode ans = deser.deserialize(ser.serialize(root));

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/390258.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python 08 面向对象

Python 面向对象 1、编程范式 2、面向对象特性 3、属性、方法 4、三大特性 5、高级方法 6、类的特殊成员方法 7、反射 8、异常处理 9、单例模式 一、编程范式 编程:程序员用特定的语法数据结构算法组成的代码来告诉计算机如何执行任务的过程 , 实现一个…

eclipse手动添加SVN插件

https://www.cnblogs.com/hcl1991/p/5888461.html 1.手动下载svn插件(百度SVNsite-1.8.18) 2.将下载好的SVNsite-1.8.18.zip 解压 3.在eclipse安装目录的plugins新建SVN文件夹 4.将SVNsite-1.8.18解压包下的features和plugins拷贝到新建的SVN文件夹下 5.…

440. 字典序的第K小数字

440. 字典序的第K小数字 给定整数 n 和 k,找到 1 到 n 中字典序第 k 小的数字。 注意:1 ≤ k ≤ n ≤ 109。 示例 : 输入: n: 13 k: 2 输出: 10 解释: 字典序的排列是 [1, 10, 11, 12, 13, 2, 3, 4, 5, 6, 7, 8, 9],所以第二小的数字是…

JDK 11 还有一个处于计划阶段的 JEP:让其支持 TLS 1.3

开发四年只会写业务代码,分布式高并发都不会还做程序员? >>> JDK 11 最近有什么消息?我们不妨来看一下它的进展情况,包括最新的 JEP 提案。Java 的新版本发布计划意味着总会有一款新的 JDK 即将推出。根据他们的计划&a…

498. 对角线遍历

498. 对角线遍历 给定一个含有 M x N 个元素的矩阵(M 行,N 列),请以对角线遍历的顺序返回这个矩阵中的所有元素,对角线遍历如下图所示。 示例: 输入: [ [ 1, 2, 3 ], [ 4, 5, 6 ], [ 7, 8, 9 ] ] 输出: [1,2,4,7,5…

Squid 访问控制配置

Squid 访问控制配置 主配置文件内加入限制参数 vim /etc/squid/squid.conf # 访问控制 acl http proto HTTP # 限制访问 good_domain添加两个域名“.”表示半解析(相当于*) acl good_domain dstdomain .kevin.net .baidu.com # 允许good_domain内的域名访问 http_access allow …

创建react应用程序_通过构建电影搜索应用程序在1小时内了解React

创建react应用程序If youve been meaning to learn React but are unsure of where to start, Scrimbas brand new Build a Movie Search App course is perfect for you! 如果您一直想学习React,但是不确定从哪里开始,那么Scrimba全新的Build a Movie S…

GeoServer自动发布地图服务

1 NetCDF气象文件自动发布案例 GeoServer是一个地理服务器,提供了管理页面进行服务发布,样式,切片,图层预览等一系列操作,但是手动进行页面配置有时并不满足业务需求,所以GeoServer同时提供了丰富的rest接口…

11. 盛最多水的容器

11. 盛最多水的容器 给你 n 个非负整数 a1,a2,…,an,每个数代表坐标中的一个点 (i, ai) 。在坐标内画 n 条垂直线,垂直线 i 的两个端点分别为 (i, ai) 和 (i, 0) 。找出其中的两条线,使得它们与 x 轴共同构…

MyBatis之输入与输出(resultType、resultMap)映射

2019独角兽企业重金招聘Python工程师标准>>> 在MyBatis中,我们通过parameterType完成输入映射(指将值映射到sql语句的占位符中,值的类型与dao层响应方法的参数类型一致),通过resultType完成输出映射(从数据库中输出,通…

PowerDesigner常用设置

2019独角兽企业重金招聘Python工程师标准>>> 使用powerdesigner进行数据库设计确实方便,以下是一些常用的设置 附加:工具栏不见了 调色板(Palette)快捷工具栏不见了 PowerDesigner 快捷工具栏 palette 不见了,怎么重新打开&#x…

批处理命令无法连续执行

如题,博主一开始的批处理命令是这样的: cd node_modules cd heapdump node-gyp rebuild cd .. cd v8-profiler-node8 node-pre-gyp rebuild cd .. cd utf-8-validate node-gyp rebuild cd .. cd bufferutil node-gyp rebuild pause执行结果&#xff1…

vue项目实战总结

马上过年了,最近工作不太忙,再加上本人最近比较懒,毫无斗志,不愿学习新东西,或许是要过年的缘故(感觉像是在找接口)。 就把前一段时间做过的vue项目,进行一次完整的总结。 这次算是详细总结,会从…

openresty 日志输出的处理

最近出了个故障,有个接口的请求居然出现了长达几十秒的处理时间,由于日志缺乏,网络故障也解除了,就没法再重现这个故障了。为了可以在下次出现问题的时候能追查到问题,所以需要添加一些追踪日志。添加这些追踪日志&…

第一阶段:前端开发_Mysql——表与表之间的关系

2018-06-26 表与表之间的关系 一、一对多关系: 常见实例:分类和商品,部门和员工一对多建表原则:在从表(多方)创建一个字段,字段作为外键指向主表(一方)的一方      …

89. Gray Code - LeetCode

为什么80%的码农都做不了架构师&#xff1f;>>> Question 89. Gray Code Solution 思路&#xff1a; n 0 0 n 1 0 1 n 2 00 01 10 11 n 3 000 001 010 011 100 101 110 111 Java实现&#xff1a; public List<Integer> grayCode(int n) {List&…

这份NLP研究进展汇总请收好,GitHub连续3天最火的都是它

最近&#xff0c;有一份自然语言处理 (NLP) 进展合辑&#xff0c;一发布就受到了同性交友网站用户的疯狂标星&#xff0c;已经连续3天高居GitHub热门榜首位。 合集里面包括&#xff0c;20多种NLP任务前赴后继的研究成果&#xff0c;以及用到的数据集。 这是来自爱尔兰的Sebasti…

最近用.NET实现DHT爬虫,全.NET实现

最近用.NET实现DHT爬虫&#xff0c;全.NET实现&#xff0c;大家可以加我QQ交流下 309159808 转载于:https://www.cnblogs.com/oshoh/p/9236186.html

C++贪吃蛇

动画链接 GitHub链接&#xff1a;https://github.com/yanpeng1314/Snake 1 #include "Snake.h"2 3 int iScore 0;4 int iGrade 1;5 6 //蛇头蛇尾初始位置7 int x_head 1, y_head 3;8 int x_tail 1, y_tail 1;9 10 //地图坐标11 int i_Map 1, j_Map 1;12 13 /…

10分钟腾讯云配置免费https

腾讯云免费证书申请地址&#xff1a; https://console.cloud.tencent... 填写相关信息 域名身份验证 文件验证 将fileauth.text 创建在网站访问根目录的 .well-known/pki-validation/目录使得 www.**.com/.well-known/pki-validation/fileauth.text 能够访问详情 等待5分钟左右…