当前位置: 首页 > news >正文

【LeetCode】297.二叉树的序列化与反序列化

题目

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

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

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

提示:

  • 树中结点数在范围 [0, 10^4] 内
  • -1000 <= Node.val <= 1000

解答

源代码

/*** 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 String serialize(TreeNode root) {return dfsSerialize(root, "");}// Decodes your encoded data to tree.public TreeNode deserialize(String data) {String[] dataArray = data.split(",");List<String> dataList = new ArrayList<>(Arrays.asList(dataArray));return dfsDeserialize(dataList);}public String dfsSerialize(TreeNode root, String str) {if (root == null) {str += "none,";} else {str += root.val + ",";str = dfsSerialize(root.left, str);str = dfsSerialize(root.right, str);}return str;}public TreeNode dfsDeserialize(List<String> dataList) {if (dataList.get(0).equals("none")) {dataList.remove(0);return null;}TreeNode root = new TreeNode(Integer.parseInt(dataList.get(0)));dataList.remove(0);root.left = dfsDeserialize(dataList);root.right = dfsDeserialize(dataList);return root;}
}// Your Codec object will be instantiated and called as such:
// Codec ser = new Codec();
// Codec deser = new Codec();
// TreeNode ans = deser.deserialize(ser.serialize(root));

总结

序列化也就是对原文件进行编码,反序列化即解码。而对二叉树的序列化和反序列化重点在于对二叉树的结构进行编码解码。我们可以根据深度优先遍历中的先序遍历对二叉树进行序列化,得到一个字符串,里面是先序遍历得到的节点的值用" , "分开,之后反序列化就是对这串字符串进行解码得到原来的二叉树。

http://www.lryc.cn/news/157520.html

相关文章:

  • Java HashSet
  • 在iPhone上构建自定义数据采集完整指南
  • Android MediaRecorder录音
  • 软件提示vcruntime140_1.dll丢失的解决方法,以及丢失的原因总结
  • Datax抽取mysql的bit类型数据
  • git 后悔药
  • vue-cli搭建一个新项目及基础配置
  • 【C++】 C++11(右值引用,移动语义,bind,包装器,lambda,线程库)
  • 附录1-爬虫的一些技巧
  • 【android12-linux-5.1】【ST芯片】【RK3588】【LSM6DSR】HAL移植
  • DragGAN应运而生,未来在4G视频上都可能利用拖拽式编辑
  • 【C++技能树】多态解析
  • 【爬虫笔记】Python爬虫简单运用爬取代理IP
  • IP协议-NAT机制(理解网络结构的关键要点)
  • Python UI自动化 —— 关键字+excel表格数据驱动
  • AI:06-基于OpenCV的二维码识别技术的研究
  • Spring MVC Http Event Stream
  • 2023年亲测有效----树莓派启动时自动邮件上报ip
  • Direct3D颜色
  • LLM - 大模型速递 Baichuan2 快速入门
  • DB2和MYSQL的LOAD原理和比较测试
  • redisson常用api
  • MySQL——数据库以及数据表的创建
  • 智能配电房管理
  • php如何解决高并发的问题?
  • Linux操作系统
  • 华为OD:VLAN资源池
  • 大学大创项目:手机室内AR导航APP项目思路
  • OpenSSL加解密算法使用方法
  • Excel VSTO开发10 -自定义任务面板