【剑指Offer】37.序列化二叉树

题目

请实现两个函数,分别用来序列化和反序列化二叉树,不对序列化之后的字符串进行约束,但要求能够根据序列化之后的字符串重新构造出一棵与原二叉树相同的树。

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

例如,可以根据层序遍历的方案序列化,如下图:

层序序列化(即用函数Serialize转化)如上的二叉树转为"{1,2,3,#,#,6,7}",再能够调用反序列化(Deserialize)将"{1,2,3,#,#,6,7}"构造成如上的二叉树。

当然你也可以根据满二叉树结点位置的标号规律来序列化,还可以根据先序遍历和中序遍历的结果来序列化。不对序列化之后的字符串进行约束,所以欢迎各种奇思妙想。

数据范围:节点数 0n≤100,树上每个节点的值满足 0≤val≤150

要求:序列化和反序列化都是空间复杂度 O(n),时间复杂度 O(n)

示例1

输入:{1,2,3,#,#,6,7}

返回值:{1,2,3,#,#,6,7}

说明:如题面图

示例2

输入:{8,6,10,5,7,9,11}

返回值:{8,6,10,5,7,9,11}

解答

源代码

import java.util.*;
/*
public class TreeNode {int val = 0;TreeNode left = null;TreeNode right = null;public TreeNode(int val) {this.val = val;}}
*/
public class Solution {public StringBuffer str = new StringBuffer();public int index = 0;public String Serialize(TreeNode root) {if (root == null) {str.append("#");return str.toString();}str.append(root.val).append(",");Serialize(root.left);Serialize(root.right);return str.toString();}public TreeNode Deserialize(String str) {if (str.charAt(index) == '#') {index++;return null;}int val = 0;while (str.charAt(index) != ',') {val = val * 10 + str.charAt(index) - '0';index++;}TreeNode root = new TreeNode(val);if (index == str.length()) {return root;} else {index++;}root.left = Deserialize(str);root.right = Deserialize(str);return root;}
}

总结

序列化就是将二叉树转换为字符串,可以按照自己设定的规则,这里我选择了前序遍历,将遍历得到的节点值添加进字符串中,字符串中不同节点值之间以 ' , ' 连接,空节点以 ' # ' 表示,反序列化则是通过字符串转换为二叉树。

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

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

相关文章

v-on 可以监听多个方法吗?

目录 ​编辑 前言:Vue 3 中的 v-on 指令 详解:v-on 指令的基本概念 用法:v-on 指令监听多个方法 解析:v-on 指令的优势和局限性 优势 局限性 **v-on 指令的最佳实践** - **适度监听**: - **方法抽离**&#x…

OpenGL —— 2.9、摄像机之模拟CS鼠标视角转动(附源码,glfw+glad)

源码效果 C源码 纹理图片 需下载stb_image.h这个解码图片的库,该库只有一个头文件。 具体代码: vertexShader.glsl #version 330 corelayout(location 0) in vec3 aPos; layout(location 1) in vec2 aUV;out vec2 outUV;uniform mat4 _modelMatrix; …

Kubernetes技术与架构-Ingress Controller

Ingress Controller控制器是实现Ingress对象的定义的组件,也即网关,负责Kubernetes集群内流量的分发,Kubernetes可以运行多个Ingress Controller控制器实例,不同的Ingress定义可以使用不同的Ingress Controller控制器实现&#xf…

JVM工具使用(jstat + jmap)

命令格式 jstat -gcutil pid interval(ms) 举例: jstat -gcutil 16361 1000 线上服务器的GC情况如下: 参数说明如下: S0: 新生代中Survivor space 0区已使用空间的百分比S1: 新生代中Survivor space 1区已使用空间的百分比E: 新生代已使用空…

查看当前cmake版本支持哪些版本的Visual Studio

不同版本的的cmake对Visual Studio的版本支持不同,以下图示展示了如何查看当前安装的cmake支持哪些版本的Visual Studio。 1.打开cmake-gui 2.查看cmake支持哪些版本的Visual Studio

php使用sqlServer

sqlServer扩展 PDO_MSSQL|sqlsrv|odbc}mssql|pdo_odbc PHP 安装php_sqlsrv php_pdo_sqlsrv https://pecl.php.net/package/sqlsrv/5.8.1/windows PECL :: Package :: pdo_sqlsrv 5.8.1 for Windows SqlServer驱动:msodbcsql

Unity读取写入Excel

1.在Plugins中放入dll,118开头的dll在Unity安装目录下(C:\Program Files\Unity\Editor\Data\Mono\lib\mono\unity) 2.写Excel public void WriteExcel(){//文件地址FileInfo newFile new FileInfo(Application.dataPath "/test.xlsx…

无障碍阅读他人开源项目结构:看完本文,你将信心满满

先看看阿里是怎么约定的 我印象中,以前在看《阿里巴巴Java开发手册》时,好像有关于工程结构和应用分层相关的内容,于是我回翻了一下,果然有: 它这里面讲的内容大概就是:关于一个正常的企业项目里一种通用的…

一款功能强大的音乐曲谱软件Guitar Pro 8 .1.1for Mac 中文破解版

Guitar Pro 8 .1.1for Mac 中文破解版是一款功能强大的音乐曲谱软件,非常适合学习如何玩,改进技巧,重现喜爱的歌曲或陪伴自己。可以帮助我们进行吉他的学习、绘谱与创作,它包含了几乎所有的吉他现有指法及音色,在做弹拨…

黄金现货操作与盈亏

现在作黄金现货买卖,投资者已经完全以电子化的方式来进行,国内和香港的投资者,通过香港的正规平台入市,可以获得50倍的资金杠杆,以及全天候交易的机会,只要掌握了一些基本的操作方式,所有投资者…

buuctf[极客大挑战 2019]Havefun 1

网页环境title标题每一帧都不要放过&#xff0c;或许那个不起眼的地方就存在重要信息到这并未发现什么重要信息&#xff0c;F12看看在源代码底部发现PHP代码&#xff1a; <!-- $cat$_GET[cat]; echo $cat; if($catdog){ echo Syc{cat_cat_cat_cat}; } --> PHP代码…

性能优化总纲

本文仅论述优化的手段&#xff0c;不涉及执行这些操作的根因&#xff0c;后续空闲时在整理“为什么”。 一、性能指标 指标有很多&#xff0c;比如 lighthouse 中使用的指标有 FCP、LCP、TBT、CLS、Speed Index&#xff0c;这些是最终的性能评估指标。 性能优化方案落地时&a…

3D测量之圆孔测量 拟合圆 点云变换

0. 效果展示 1. 圆孔测量介绍 此文中的圆孔测量是一项3D视觉技术,旨在精确测量物体表面上的圆孔的直径和中心坐标。通过使用高精度3D相机(线激光轮廓仪或结构体等)采集原始点云数据,通过3D视觉算法能够快速、准确地分析物体上的圆孔特征,为制造和工程领域提供了强大的测量…

AI学习路线

目前跟B站刘二大人老师学到了CNN&#xff0c;对深度学习有了一定的了解和认识&#xff0c;但是还不够深入&#xff0c;之前直接上李沐老师的视频太顶了555&#xff0c;不过自己基础确实不太行(╥╯^╰╥) 在B站看到了一位up分享的学习路线&#xff0c;感觉很好&#xff01; 分…

Android-Framework 禁止状态栏下拉

一、环境 高通865 Android 10 二、使用情景 在Launcher 桌面以及应用内&#xff0c;禁止状态栏下拉 三、代码实现 1、应用内禁止状态栏下拉 frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarView.java -230,8 230,10 public…

系列二、Spring IOC

一、什么是IOC&#xff1f;有什么作用&#xff1f;优点是什么&#xff1f; IOC是控制反转的意思&#xff0c;即将创建对象的控制权交给了Spring的IOC&#xff0c;以前是由程序员自己去创建控制对象&#xff0c;现在交由Spring的IOC去创建控制&#xff0c;如果要去使用对象&…

VUE 集成 Mockjs

一、集成方式 在项目目录中执行以下命令&#xff1a; npm i -D mockjs二、配置 &#xff08;1&#xff09;在项目src目录下创建mock目录&#xff0c;并创建index.js文件&#xff0c;在index.js文件中添加以下代码&#xff1a; import Mock from mockjs// 配置需要mock的url…

STM32+摁键与定时器实现Led灯控制(中断)

中断作为单片机开发必须掌握的内容&#xff0c;它能够在不搭载操作系统的情况下让我们体验多任务处理的快感&#xff0c;保证了高优先级任务的实时性&#xff0c;同时系统中断也能够提供给用户在核心发生错误之后进行处理的机会。STM32F103系列单片机中断非常强大&#xff0c;每…

GaussDB数据库管理系统介绍

1.GaussDB的发展 2.GaussDB的生态 内部&#xff1a; 云化自动化方案。通过数据库运行基础设施的云化将DBA(数据库管理员)和运维人员的日常工作 自动化。外部&#xff1a; 采用与数据库周边生态伙伴对接与认证的生态连接融合方案&#xff0c;解决开发者/DBA难获取、应用难对接等…

[linux] 怎么批量kill掉挂载运行python 某个.py文件的端口

kill $(ps aux | grep python tools/token_raw_data_for_dsw.py | grep -v grep | awk {print $2}) 使用一系列的命令来查找并终止正在运行的名为"python main.py"的进程。 具体的步骤如下&#xff1a; ps aux命令用于列出当前正在运行的所有进程。grep python ma…