题目

序列化是将一个数据结构或者对象转换为连续的比特位的操作,进而可以将转换后的数据存储在一个文件或者内存中,同时也可以通过网络传输到另一个计算机环境,采取相反方式重构得到原数据。

请设计一个算法来实现二叉树的序列化与反序列化。这里不限定你的序列 / 反序列化算法执行逻辑,你只需要保证一个二叉树可以被序列化为一个字符串并且将这个字符串反序列化为原始的树结构。

提示: 输入输出格式与 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]

解题思路

  • 序列化时,先序遍历二叉树,使用null表示空节点,使用’,'分隔每一个节点
  • 反序列化时,将字符串使用’,'分割回去原来的若干个节点元素,同样先序遍历这些节点,就能还原出这颗二叉树

代码

/*** Definition for a binary tree node.* public class TreeNode {*     int val;*     TreeNode left;*     TreeNode right;*     TreeNode(int x) { val = x; }* }*/public class Codec {// Encodes a tree to a single string.public void se(TreeNode root,StringBuilder strings) {if(root==null)strings.append("null").append(',');else {strings.append(root.val).append(',');se(root.left,strings);se(root.right,strings);}}public String serialize(TreeNode root) {StringBuilder builder = new StringBuilder();  se(root,builder);return builder.toString();}// Decodes your encoded data to tree.public TreeNode deserialize(String data) {String[] strings = data.split(",");return de(strings);}int cur=0;public TreeNode de(String[] strings){if(cur>=strings.length||strings[cur].equals("null")){cur++;return null; }else {TreeNode c = new TreeNode(Integer.parseInt(strings[cur]));cur++;c.left =de(strings);c.right=de(strings);return c;}}}// Your Codec object will be instantiated and called as such:
// Codec codec = new Codec();
// codec.deserialize(codec.serialize(root));

剑指 Offer 37. 序列化二叉树相关推荐

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

    [LeetCode]剑指 Offer 37. 序列化二叉树 文章目录 [LeetCode]剑指 Offer 37. 序列化二叉树 package offer;import java.util.Link ...

  2. 【LeetCode笔记】剑指Offer 37. 序列化二叉树(Java、二叉树、序列化、BFS、队列)

    文章目录 题目描述 思路 && 代码 二刷 题目描述 这道题涉及到不少 String.StringBuilder.Integer的转换.处理. 思路 && 代码 序列化 ...

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

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

  4. 35-剑指 Offer 37. 序列化二叉树

    题目 请实现两个函数,分别用来序列化和反序列化二叉树. 你需要设计一个算法来实现二叉树的序列化与反序列化.这里不限定你的序列 / 反序列化算法执行逻辑,你只需要保证一个二叉树可以被序列化为一个字符串并 ...

  5. 《剑指offer》序列化二叉树

    题目:请实现两个函数,分别用来序列化和反序列化二叉树 解析:首先存储二叉树的先序遍历,遇到null就添加"#," 否则添加"值,".构件二叉树的时候也是用先序遍 ...

  6. [剑指offer] 61. 序列化二叉树

    题目描述 请实现两个函数,分别用来序列化和反序列化二叉树 题目很差,没有测试样例. 默认是先序遍历序列化. class Solution {public:vector<int> vec;v ...

  7. 【LeetCode】剑指 Offer 07. 重建二叉树

    [LeetCode]剑指 Offer 07. 重建二叉树 文章目录 [LeetCode]剑指 Offer 07. 重建二叉树 package offer;import java.util.ArrayD ...

  8. 【LeetCode】剑指 Offer 68 - II. 二叉树的最近公共祖先

    [LeetCode]剑指 Offer 68 - II. 二叉树的最近公共祖先 文章目录 [LeetCode]剑指 Offer 68 - II. 二叉树的最近公共祖先 一.DFS 一.DFS 祖先的定义 ...

  9. 【LeetCode】剑指 Offer 55 - I. 二叉树的深度

    [LeetCode]剑指 Offer 55 - I. 二叉树的深度 文章目录 [LeetCode]剑指 Offer 55 - I. 二叉树的深度 一.后序遍历(DFS) 二.层序遍历 一.后序遍历(D ...

最新文章

  1. 关于Web应用程序数据库连接的使用
  2. linux 设置时间为昨天,Linux —— 时间(tzselect、timedatactl命令,查看和修改时区,修改时区为东八区)...
  3. 刘奕佳: 我的职校新生活 | 班级日常分享
  4. SpringMVC解决静态资源不能访问
  5. AI + 3D!英伟达开源3D深度学习框架Kaolin
  6. Java基础提升高级API
  7. 旷视科技提出双向网络BiSeNet:实现实时语义分割
  8. Matlab学习笔记 figure函数
  9. 对比学习Python实现
  10. 中望3d快捷键命令大全_CAD和3DMAX常用快捷键大全与教程【完整版】
  11. udp数据包大小问题
  12. 计算机硬件系统三个子系统,硬件:计算机的体系结构3.ppt
  13. 一个用JS编写的随机抽取号码的小程序
  14. STC89C52 VS1838红外接收器自制家庭遥控灯开关
  15. 黑马程序员——银行业务调度系统
  16. 透视虎牙斗鱼三季报:游戏直播在各自“求变”中见分晓
  17. 关于使用克莱姆法则和矩阵消元法解线性方程组的效率的比较
  18. 使用c语言实现后缀表达式计算器
  19. Oracle表分区合并
  20. 指令能被计算机硬件理解并执行,计算机

热门文章

  1. 为什么要学习汇编语言?如何正确学习汇编语言?
  2. 不看绝对血亏!java字符串转json
  3. java生成json字符串,威力加强版
  4. 网络优化软件apk,金九银十怎么从中小企业挤进一线大厂?我先收藏为敬
  5. JAVA遇见HTML——JSP篇(JSP状态管理)
  6. 大理石在哪儿 (Where is the Marble?,UVa 10474)
  7. 洛谷 P4012 深海机器人问题【费用流】
  8. C#深入浅出 关键字(一)
  9. 什么原因成就了一位优秀的程序员?(转)
  10. 如何在MATLAB下把模糊推理系统转化为查询表(转载)