算法总结
1.序列化与反序列化二叉树
序列化是将一个数据结构或者对象转换为连续的比特位的操作,进而可以将转换后的数据存储在一个文件或者内存中,同时也可以通过网络传输到另一个计算机环境,采取相反方式重构得到原数据。
请设计一个算法来实现二叉树的序列化与反序列化。这里不限定你的序列 / 反序列化算法执行逻辑,只需要保证一个二叉树可以被序列化为一个字符串并且将这个字符串反序列化为原始的树结构。
题解:就是将遍历二叉树将树变成字符串,然后把字符串变成二叉树

package com.chenghaixiang.jianzhi2.day16; import java.lang.reflect.Array; import java.util.Arrays; import java.util.LinkedList; import java.util.List; /** * @author 程海翔 * @school 石家庄铁道大学 */ public class Office048 { } //序列化是将一个数据结构或者对象转换为连续的比特位的操作,进而可以将转换后的数据存储在一个文件或者内存中,同时也可以通过网络传输到另一个计算机环境,采取相反方式重构得到原数据。 // //请设计一个算法来实现二叉树的序列化与反序列化。这里不限定你的序列 / 反序列化算法执行逻辑,只需要保证一个二叉树可以被序列化为一个字符串并且将这个字符串反序列化为原始的树结构。 //深度优先搜索 class Codec { //序列化 // Encodes a tree to a single string. public String serialize(TreeNode root) { return rserialize(root,""); } String rserialize(TreeNode root,String str){ if(root==null){ str=str+"None,"; }else { //将int类型转换为String str+=str.valueOf(root.val)+","; str=rserialize(root.left,str); str=rserialize(root.right,str); } return str; } //反序列化 // Decodes your encoded data to tree. public TreeNode deserialize(String data) { String[] dataArray=data.split(","); //Arrays.asList返回由指定数组支持的固定大小的列表。 List<String> dataList=new LinkedList<>(Arrays.asList(dataArray)); return rdeserialize(dataList); } TreeNode rdeserialize(List<String> dataList){ if(dataList.get(0).equals("None")){ dataList.remove(0); return null; } //将链表的值还原成二叉树 TreeNode root=new TreeNode(Integer.valueOf(dataList.get(0))); //还原后删除当前值 dataList.remove(0); root.left=rdeserialize(dataList); root.right=rdeserialize(dataList); return root; } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
2020-08-28 每日日报47