JAVA练习90-二叉树的序列化与反序列化
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
前言
提示:这里可以添加本文要记录的大概内容:
3月26日练习内容
提示:以下是本篇文章正文内容,下面案例可供参考
一、题目-
1.题目描述
序列化是将一个数据结构或者对象转换为连续的比特位的操作,进而可以将转换后的数据存储在一个文件或者内存中,同时也可以通过网络传输到另一个计算机环境,采取相反方式重构得到原数据。
请设计一个算法来实现二叉树的序列化与反序列化。这里不限定你的序列 / 反序列化算法执行逻辑,你只需要保证一个二叉树可以被序列化为一个字符串并且将这个字符串反序列化为原始的树结构。
提示: 输入输出格式与 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]
2.思路与代码
2.1 思路
1.中序遍历遍历二叉树,遇到结点为null的时候,则赋值为”None,“
2.当结点不为空时,则将结点值与”,“输出为字符串
3.反序列化时,将字符串按照”,“进行字符分割,分割为字符数组,并将分割后的字符数组转为链表集合
4.当第一个值为None的时候,则直接输出null,当不为None的时候则创建二叉树并给二叉树赋值
2.2 代码
代码如下(示例):
/** * 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 rserialize(root, ""); } public String rserialize(TreeNode root,String str){ if(root == null){ str += "None,"; }else{ //根结点 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[] dataArr = data.split(","); //将字符数组转为集合 List<String> dataList = new LinkedList<String>(Arrays.asList(dataArr)); return rdeserialize(dataList); } public TreeNode rdeserialize(List<String> dataList){ if(dataList.get(0).equals("None")){ //当值为None的时候代表值为空 //删去该值 dataList.remove(0); //输出null return null; } //将值提取出来创建结点 TreeNode root = new TreeNode(Integer.valueOf(dataList.get(0))); //将创建过的结点去除 dataList.remove(0); //创建左结点 root.left = rdeserialize(dataList); root.right = rdeserialize(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));
总结
提示:这里对文章进行总结: