剑指Offer_61_序列化二叉树

题目描述

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

解题思路

使用前序遍历,将遇到的结点添加到字符串中,遇到null则将一个#添加要序列化字符串中。反序列化时,每次读取根结点,然后读取其左结点,遇到#(null)时,返回上层。

实现

/*树结点定义*/
public class TreeNode {int val = 0;TreeNode left = null;TreeNode right = null;public TreeNode(int val) {this.val = val;}}
/*实现*/
public class Solution {String Serialize(TreeNode root) {StringBuilder sb = new StringBuilder();serialize(root, sb);return sb.toString();}private void serialize(TreeNode root, StringBuilder sb) {if (root == null) {sb.append("#,");return;}sb.append(root.val + ",");serialize(root.left, sb);serialize(root.right, sb);}private class Result{TreeNode node;int pos;Result(TreeNode node, int pos){this.node = node;this.pos = pos;}}TreeNode Deserialize(String str) {if (str == null || str.length() <= 0) return null;String[] strs = str.split(",");Result re = deserialize(strs, 0);return re.node;}private Result deserialize(String[] str, int i) {TreeNode root = null;if (i < str.length - 1){if ("#".equals(str[i])) return new Result(null, i+1);root = new TreeNode(Integer.parseInt(str[i]));Result l = deserialize(str, i + 1);root.left = l.node;Result r = deserialize(str, l.pos);root.right = r.node;return new Result(root, r.pos);}return new Result(root, i+1);}
}

转载于:https://www.cnblogs.com/ggmfengyangdi/p/5828616.html

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

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

相关文章

ANSYS——后处理中单元表(ELEMENT table)的作用、创建、使用

目录 单元表的作用 1、访问无法绘制的数据 2、数据的数据源 单元表的创建

久违的反省,容忍现在的自己

距离上一次写的随笔刚好是一个月了&#xff0c;标题还是不知道写什么好&#xff0c;也可以说这一个月来自己能够拿出来称道的东西实在是少之又少吧。更多的感受就是很多时候都是在搬砖&#xff0c;尽管这一个月来学习的东西实事求是地说不是很难的。最大的问题还是解决问题的思…

基于SSL的mysql(MariaDB)主从复制

一、前言 备份数据库是生产环境中的首要任务&#xff0c;重中之重&#xff0c;有时候不得不通过网络进行数据库的复制&#xff0c;这样就需要保证数据在网络传输过程中的安全性&#xff0c;因此使用基于SSL的复制会大加强数据的安全性 二、准备工作 1、主从服务器时间同步 12[r…

ANSYS——分析实例,平面对称问题

目录 一、问题描述 二、问题分析 三、单元类型设置、材料属性设置 四、建模

Ubuntu16.04安装nginx

//ubuntu //安装nginxcurl -LJO http://nginx.org/download/nginx-1.10.1.tar.gz tar zxvf nginx-1.10.1.tar.gz cd nginx-1.10.1.tar.gz sudo apt install gcc autoconf automake build-essential sudo apt-get install libpcre3 libpcre3-dev sudo apt-get install openssl s…

【数据结构作业—02】双链表

2.实现下述要求的Locate运算的函数 问题描述 设有一个带表头结点的双向链表L&#xff0c;每个结点有4个数据成员&#xff1a;指向前驱结点的指针prior、指向后继结点的指针next、存放数据的成员data和访问频度freq。所有结点的freq初始时都为0。每当在链表上进行一次Locate (L,…

ANSYS——对称模型对称边界的确定以及对称边界的约束施加问题

目录 一、什么是对称模型(对称模型的特性)? 二、利用模型的对称特性的目的?

彻底明白Java语言中的IO系统

ava的核心库java.io提供了全面的IO接口&#xff0c;包括&#xff1a;文件读写&#xff0c;标准设备输出等等。Java中IO是以流为基础进行输入输出的&#xff0c;所有数据被串行化写入输出流&#xff0c;或者从输入流读入。在具体使用中很多初学者对Java.io包的使用非常含糊&…

第9章 接口

1、抽象类&#xff1a; 包含抽象方法的类叫抽象类&#xff0c;如果一个类包含一个或多个抽象方法(abstract void f();)&#xff0c;该类必须被限定为抽象的&#xff0c;否则编译出错。 1、抽象类不能被实例化&#xff0c;实例化的工作应该交由它的子类来完成&#xff0c;它只需…

用node-webkit(NW.js)创建桌面程序

以往写windows桌面程序需要用MFC、C#之类的技术&#xff0c;那么如果你只会web开发技术呢&#xff1f;或者说你有一个网站&#xff0c;但是你想把你的网站打包成一个桌面应用程序&#xff0c;该如何做呢&#xff1f; 答案就是用node-webkit这个开源框架&#xff0c;他封装了web…

一头扎进Node系列 - 目录

前言 本系列是属于初级教程。博主我也还只是一个node的新兵蛋子&#xff0c;想通过学习官网的API文档&#xff0c;慢慢的打好Node基础。当然后期这系列文档会慢慢完善&#xff0c;并且会添加一些项目实战中遇到的一些问题以及解决方案&#xff01;如果你也是初学者&#xff0c;…

ANSYS——“There is at least 1 small equation solver pivot term”问题的解决办法

目录 问题出现的原因 问题解决办法 1、根据提示对节点进行约束的添加

JAVA中几个常用的方法

类Object是类层次结构的根类&#xff0c;每一个类都使用Object作为超类&#xff0c;所有对象&#xff08;包括数组&#xff09;都实现这个类的方法。jdk1.5中&#xff0c;描述了该类中的11个方法 1.getClass public final Class<? extends Object> getClass() 返回一个对…

ANSYS——载荷的方向

目录 一、压力的方向(FORCE) 1、为正的情况 2、为负的情况 二、压强的方向(PRESSURE)

kindeditor用法简单介绍(转)

1&#xff0c;首先去官网下载http://www.kindsoft.net/ 2&#xff0c;解压之后如图所示&#xff1a; 由于本人做的是用的是JSP&#xff0c;所以ASP,PHP什么的就用不上了&#xff0c;直接把那些去掉然后将整个文件夹扔进Myeclipse&#xff0c;如图&#xff1a; 里面有个报错&am…

hadoop 分片与分块,map task和reduce task的理解

分块&#xff1a;Block HDFS存储系统中&#xff0c;引入了文件系统的分块概念&#xff08;block&#xff09;&#xff0c;块是存储的最小单位&#xff0c;HDFS定义其大小为64MB。与单磁盘文件系统相似&#xff0c;存储在 HDFS上的文件均存储为多个块&#xff0c;不同的是&#…

SOLIDWORKS——参数化建模

https://www.sohu.com/a/259742200_100042821 知识点&#xff1a;投影曲线、曲面填充、扫描、外观设置 建模步骤 1.先在工具——方程式里输入一个直径的变量A120 。 2.在前视基准面上草绘圆&#xff0c;画一条直径。直径等于变量A。 3.旋转&#xff0c;选择粉色区域。 4.上视…

Arch 常用工具

一、网络浏览pacman -S firefox firefox-i18n注&#xff1a;该命令中的前者为 Firefox 主程序,后者为语言包。pacman -S opera二、图像编辑pacman -S gimp #图像编辑软件首选 GIMPpacman -S inkscape #矢量图形编辑软件Inkscapepacman -S scrot #…

Androd安全——反编译技术完全解析

0&#xff0e;前言单纯从技术角度上来讲&#xff0c;掌握反编译功能确实是一项非常有用的技能。另外既然别人可以反编译程序&#xff0c;我们当然有理由应该对程序进行一定的保护&#xff0c;因此代码混淆也是我们必须要掌握的一项技术。看完此篇如果对代码混淆也感兴趣&#x…

python——shape 与reshape

转载自:https://blog.csdn.net/u010916338/article/details/84066369 shape()和reshape()都是数组array中的方法 numpy中reshape函数的三种常见相关用法 numpy.arange(n).reshape(a, b) 依次生成n个自然数&#xff0c;并且以a行b列的数组形式显示np.arange(16).reshape(2,…