题目内容:

解题思路:

一,序列化

  • 所谓序列化就是将二叉树的每个结点按照层序遍历的结果输出,这里面也包含空节点,因为这棵二叉树,不一定是一颗完全二叉树
  • 分析到这里序列化就变得简单多了,唯一的难点在于将树编码为单字符串(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;}

序列化二叉树(序列化和反序列化)相关推荐

  1. 二叉树序列化与反序列化相关题目(Leetcode题解-Python语言)

    297. 二叉树的序列化与反序列化(剑指 Offer 37. 序列化二叉树)(剑指 Offer II 048. 序列化与反序列化二叉树) class Codec:def serialize(self, ...

  2. 二叉树序列化、反序列化、层次遍历python

    一.二叉树的分层遍历 给定一棵二叉树,要求进行分层遍历,每层的节点值单独打印一行,下图给出事例结构: 思路: 增加两个TreeNode:last和nlast last:表示当前遍历层最右结点 nlas ...

  3. 二叉树序列化/反序列化

    二叉树被记录成文件的过程,为二叉树的序列化 通过文件重新建立原来的二叉树的过程,为二叉树的反序列化 设计方案并实现. (已知结点类型为32位整型) 思路:先序遍历实现. 因为要写入文件,我们要把二叉树 ...

  4. 【二叉树】二叉树序列化和反序列化

    二叉树序列化和反序列化 1.二叉树 --> 字符串(序列化) 2.字符串 --> 二叉树(反序列化) 序列化的方式 1.根据先序遍历序列化 2. 根据中序遍历序列化 3.根据后序遍历序列化 ...

  5. 剑指offer:二叉树序列化与反序列化 - Python

    转载自:https://blog.csdn.net/u010005281/article/details/79787278 题目描述 请实现两个函数,分别用来序列化和反序列化二叉树. 解题思路 序列化 ...

  6. 剑指offer:面试题37. 序列化二叉树

    题目:序列化二叉树 请实现两个函数,分别用来序列化和反序列化二叉树. 示例:  你可以将以下二叉树: 1    / \   2   3      / \     4   5 序列化为 "[1 ...

  7. 《剑指offer》-- 序列化二叉树、二叉搜索树的第k个节点、数据流中的中位数、滑动窗口的最大值

    一.序列化二叉树: 1.题目: 请实现两个函数,分别用来序列化和反序列化二叉树. 2.解题思路: (1)根据前序遍历规则完成序列化与反序列化.所谓序列化指的是遍历二叉树为字符串:所谓反序列化指的是依据 ...

  8. [二叉树]序列化二叉树 (剑指offer61)

    题目描述 请实现两个函数,分别用来序列化和反序列化二叉树. 解题思路 序列化二叉树:把一棵二叉树按照某种遍历方式的结果以某种格式保存为字符串.需要注意的是,序列化二叉树的过程中,如果遇到空节点,需要以 ...

  9. 剑指Offer_61_序列化二叉树

    题目描述 请实现两个函数,分别用来序列化和反序列化二叉树 解题思路 使用前序遍历,将遇到的结点添加到字符串中,遇到null则将一个#添加要序列化字符串中.反序列化时,每次读取根结点,然后读取其左结点, ...

最新文章

  1. Oracle分区表 (二)
  2. 路径分析开源工程OpenTripPlaner 概述
  3. C++学习笔记——虚函数
  4. 目标检测之hough forest---霍夫森林(Hough Forest)目标检测算法
  5. wps表格l制作甘特图_WPS表格制作进度计划横道图教程
  6. BZOJ4715 囚人的旋律
  7. 手写输入---随手写
  8. php车牌识别,跨平台车牌识别应用 Light-LPR
  9. SEO人员应该突破的5大思想误区
  10. 【初学python】用python做一个简单的超市收银台付款系统
  11. 练习下微信发红包测试用例
  12. 域名申请需要多长时间?域名申请后多久能使用?
  13. 双击计算机电脑没反应,win10系统双击我的电脑没反应的设置方法
  14. html中<a>标签的安全问题
  15. stm32 DMA转运ADC多通道
  16. BERT大火却不懂Transformer?读这一篇就够了
  17. [POI2007]ZAP-Queries 莫比乌斯反演(模板)
  18. 阿里云对象存储OSS标准型(LRS)存储包详解
  19. 【Unity3D】平面绘图——GL与GUI
  20. 轻松入门自然语言处理系列 项目2 搭建智能问答系统

热门文章

  1. bootstrap table中的行tr标签设置display:block后行样式错乱问题
  2. CodePUsh回滚
  3. 近日,心通达信创OA摘得“2022中国信创协同办公优秀产品奖”
  4. CHM电子书木马制作全攻略
  5. webots-Controller Programming
  6. 合金装备幸存服务器维护时间,合金装备幸存有什么技巧_合金装备生存技巧心得分享_3DM单机...
  7. 【黑马讲义】C++提高编程
  8. centos 设置本地域名_centos 本地dns配置
  9. html常用标签讲解
  10. 高等光学仿真 (matlab版) 百度云,高等光学仿真(MATLAB版):光波导•激光