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,一经查实,立即删除!

相关文章

交互式图表_如何构建罗马数字转换器和交互式罗马数字图表

交互式图表The Roman numerals are no longer an essential part of our daily lives. But we do use them when designing monuments, clocks, and even for sporting events.罗马数字不再是我们日常生活中必不可少的部分。 但是我们在设计纪念碑,钟表甚至体育赛事…

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],所以第二小的数字是…

微信小程序 设置背景占满整个页面

微信小程序,默认的根节点是<page></page>&#xff0c;所有内容都包裹在这个标签里&#xff0c;如何让页面的背景占满整个屏幕&#xff1f;&#xff1f; <page><view class"bg">....</view> </page> .bg {background-image:ur…

udemy下载课程无法播放_最好的Udemy Web开发课程+热门免费课程

udemy下载课程无法播放Heres a list of some of the most popular web development courses on Udemy:以下是Udemy上一些最受欢迎的Web开发课程的列表&#xff1a; Best General Web Development Courses on Udemy:关于Udemy的最佳常规Web开发课程&#xff1a; The Complete …

渗透测试初学者_渗透测试许可证:面向初学者的道德黑客课程

渗透测试初学者A penetration test is an authorized cyberattack on a computer system, performed to evaluate the security of the system. 渗透测试是对计算机系统的授权网络攻击&#xff0c;旨在评估系统的安全性。 Weve released a full pentesting course on the free…

Codeforces 915 E Physical Education Lessons

题目描述 This year Alex has finished school, and now he is a first-year student of Berland State University. For him it was a total surprise that even though he studies programming, he still has to attend physical education lessons. The end of the term is …

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

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

498. 对角线遍历

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

软件测试测试用例编写_不要先编写所有软件测试-只需编写一个

软件测试测试用例编写Test Driven Development (TDD) is sometimes described as “writing tests first”. The TDD mantra states that we should not write code before we have written automated tests that exercise that code. Writing code first is considered subopt…

练习五

1.团队模式和团队的开发模式有什么关系&#xff1f; 答&#xff1a; 首先我来解释一下这两个名词&#xff1a; 我查资料了解了一下&#xff0c;团队模式&#xff0c;更偏向于多人合作的那种&#xff0c;而且我理解的“团队”会是一种多人合作的情况下&#xff0c;长期磨合后的一…

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 …

剑指 Offer 62. 圆圈中最后剩下的数字

0,1,,n-1这n个数字排成一个圆圈&#xff0c;从数字0开始&#xff0c;每次从这个圆圈里删除第m个数字&#xff08;删除后从下一个数字开始计数&#xff09;。求出这个圆圈里剩下的最后一个数字。 例如&#xff0c;0、1、2、3、4这5个数字组成一个圆圈&#xff0c;从数字0开始每…

rust 编程入门_面向初学者的Rust –最受欢迎的编程语言入门

rust 编程入门Rust has been voted Stack Overflow’s most loved programming language for five years in a row. This article will tell you why Rust is awesome.Rust已连续五年被评为Stack Overflow最受欢迎的编程语言。 本文将告诉您为什么Rust很棒。 Rust is a system…

【转载】springboot:如何优雅的使用mybatis

这两天启动了一个新项目因为项目组成员一直都使用的是mybatis&#xff0c;虽然个人比较喜欢jpa这种极简的模式&#xff0c;但是为了项目保持统一性技术选型还是定了 mybatis。到网上找了一下关于spring boot和mybatis组合的相关资料&#xff0c;各种各样的形式都有&#xff0c;…

创建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&#xff0c;但是不确定从哪里开始&#xff0c;那么Scrimba全新的Build a Movie S…

GeoServer自动发布地图服务

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

selenium+ python自动化--断言assertpy

前言&#xff1a; 在对登录验证时&#xff0c;不知道为何原因用unittest的断言不成功&#xff0c;就在网上发现这个assertpy&#xff0c;因此做个笔记 准备&#xff1a; pip install assertypy 例子&#xff1a; 1 from assertpy import assert_that2 3 4 def check_login():5 …

11. 盛最多水的容器

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