序列化二叉树(序列化和反序列化)
题目内容:
解题思路:
一,序列化
- 所谓序列化就是将二叉树的每个结点按照层序遍历的结果输出,这里面也包含空节点,因为这棵二叉树,不一定是一颗完全二叉树
- 分析到这里序列化就变得简单多了,唯一的难点在于将树编码为单字符串(Encodes a tree to a single string)
- 因此我们借用于StringBuilder 的特性,可以利用append拼接八大类型的任一种类型,此时选择以字符串类型进行拼接
- 并在队头结点不等于空的时候进行其子节点的入队列操作
public String serialize(TreeNode root) {//如果根节点为空,返回nullif(root == null){return "[]";}//创建一个StringBuilder的对象sbStringBuilder sb = new StringBuilder();//根绝返回结果可以知道,需要添加"["sb.append("[");Queue<TreeNode> q = new LinkedList<>();//将头结点入队列q.offer(root);while(!q.isEmpty()){TreeNode cur = q.poll();//如果此时队头的结点不为空,将其val保存到sb中,并加上","if(cur != null){//也可以是 sb.append(cur.val + ",");sb.append(cur.val).append(",");//进行其孩子结点的入队列操作q.offer(cur.left);q.offer(cur.right);}else{//如果结点为空,那么就添加"null"sb.append("null").append(",");}}//去掉最后一个","sb.deleteCharAt(sb.length() - 1);//加上"]"sb.append("]");return sb.toString();}
二,反序列化
- 反序列化就是根据上面的序列化结果来重新创建二叉树
- 思路还是先将序列化结果分割成字符串数组
- 以层序遍历的顺序,去取相应的孩子结点,这个取孩子结点需要一个移动的下标来进行遍历
// Decodes your encoded data to tree.public TreeNode deserialize(String data) {//如果字符串data的内容和空字符串相等,返回空if(data.equals("[]")){return null;}/*根绝上面的序列化可以得知,0号位置一定是"[",最后一位一定是"]"因此去掉最后一位和第一位,并且将字符串以","处分割为子字符串,以字符串数组返回*/String[] s = data.substring(1,data.length() - 1).split(",");Queue<TreeNode> q = new LinkedList<>();//将字符串的第一位先定义好,并入队列TreeNode root = new TreeNode(Integer.parseInt(s[0]));q.offer(root);//后序的i从1开始int i = 1; while(!q.isEmpty()){TreeNode cur = q.poll();//如果字符串数组s中的是s[i]不为空,那么就以此字符的值定义cur.leftif(!s[i].equals("null")){cur.left = new TreeNode(Integer.parseInt(s[i]));q.offer(cur.left);}i++;if(!s[i].equals("null")){cur.right = new TreeNode(Integer.parseInt(s[i]));q.offer(cur.right);}i++;}return root;}
序列化二叉树(序列化和反序列化)相关推荐
- 二叉树序列化与反序列化相关题目(Leetcode题解-Python语言)
297. 二叉树的序列化与反序列化(剑指 Offer 37. 序列化二叉树)(剑指 Offer II 048. 序列化与反序列化二叉树) class Codec:def serialize(self, ...
- 二叉树序列化、反序列化、层次遍历python
一.二叉树的分层遍历 给定一棵二叉树,要求进行分层遍历,每层的节点值单独打印一行,下图给出事例结构: 思路: 增加两个TreeNode:last和nlast last:表示当前遍历层最右结点 nlas ...
- 二叉树序列化/反序列化
二叉树被记录成文件的过程,为二叉树的序列化 通过文件重新建立原来的二叉树的过程,为二叉树的反序列化 设计方案并实现. (已知结点类型为32位整型) 思路:先序遍历实现. 因为要写入文件,我们要把二叉树 ...
- 【二叉树】二叉树序列化和反序列化
二叉树序列化和反序列化 1.二叉树 --> 字符串(序列化) 2.字符串 --> 二叉树(反序列化) 序列化的方式 1.根据先序遍历序列化 2. 根据中序遍历序列化 3.根据后序遍历序列化 ...
- 剑指offer:二叉树序列化与反序列化 - Python
转载自:https://blog.csdn.net/u010005281/article/details/79787278 题目描述 请实现两个函数,分别用来序列化和反序列化二叉树. 解题思路 序列化 ...
- 剑指offer:面试题37. 序列化二叉树
题目:序列化二叉树 请实现两个函数,分别用来序列化和反序列化二叉树. 示例: 你可以将以下二叉树: 1 / \ 2 3 / \ 4 5 序列化为 "[1 ...
- 《剑指offer》-- 序列化二叉树、二叉搜索树的第k个节点、数据流中的中位数、滑动窗口的最大值
一.序列化二叉树: 1.题目: 请实现两个函数,分别用来序列化和反序列化二叉树. 2.解题思路: (1)根据前序遍历规则完成序列化与反序列化.所谓序列化指的是遍历二叉树为字符串:所谓反序列化指的是依据 ...
- [二叉树]序列化二叉树 (剑指offer61)
题目描述 请实现两个函数,分别用来序列化和反序列化二叉树. 解题思路 序列化二叉树:把一棵二叉树按照某种遍历方式的结果以某种格式保存为字符串.需要注意的是,序列化二叉树的过程中,如果遇到空节点,需要以 ...
- 剑指Offer_61_序列化二叉树
题目描述 请实现两个函数,分别用来序列化和反序列化二叉树 解题思路 使用前序遍历,将遇到的结点添加到字符串中,遇到null则将一个#添加要序列化字符串中.反序列化时,每次读取根结点,然后读取其左结点, ...
最新文章
- Oracle分区表 (二)
- 路径分析开源工程OpenTripPlaner 概述
- C++学习笔记——虚函数
- 目标检测之hough forest---霍夫森林(Hough Forest)目标检测算法
- wps表格l制作甘特图_WPS表格制作进度计划横道图教程
- BZOJ4715 囚人的旋律
- 手写输入---随手写
- php车牌识别,跨平台车牌识别应用 Light-LPR
- SEO人员应该突破的5大思想误区
- 【初学python】用python做一个简单的超市收银台付款系统
- 练习下微信发红包测试用例
- 域名申请需要多长时间?域名申请后多久能使用?
- 双击计算机电脑没反应,win10系统双击我的电脑没反应的设置方法
- html中<a>标签的安全问题
- stm32 DMA转运ADC多通道
- BERT大火却不懂Transformer?读这一篇就够了
- [POI2007]ZAP-Queries 莫比乌斯反演(模板)
- 阿里云对象存储OSS标准型(LRS)存储包详解
- 【Unity3D】平面绘图——GL与GUI
- 轻松入门自然语言处理系列 项目2 搭建智能问答系统
热门文章
- bootstrap table中的行tr标签设置display:block后行样式错乱问题
- CodePUsh回滚
- 近日,心通达信创OA摘得“2022中国信创协同办公优秀产品奖”
- CHM电子书木马制作全攻略
- webots-Controller Programming
- 合金装备幸存服务器维护时间,合金装备幸存有什么技巧_合金装备生存技巧心得分享_3DM单机...
- 【黑马讲义】C++提高编程
- centos 设置本地域名_centos 本地dns配置
- html常用标签讲解
- 高等光学仿真 (matlab版) 百度云,高等光学仿真(MATLAB版):光波导•激光