1 Star 1 Fork 1

千羽 / leetcode

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
Codec.java 3.09 KB
一键复制 编辑 原始数据 按行查看 历史
千羽 提交于 2022-05-04 11:47 . 死磕算法系列
package com.nateshao.leetcode.binary_tree.code14_297_Codec;
import java.util.LinkedList;
/**
* @date Created by 邵桐杰 on 2022/5/4 11:17
* @微信公众号 千羽的编程时光
* @个人网站 www.nateshao.cn
* @博客 https://nateshao.gitlab.io
* @GitHub https://github.com/nateshao
* @Gitee https://gitee.com/nateshao
* Description:
* 297. 二叉树的序列化与反序列化
* 序列化是将一个数据结构或者对象转换为连续的比特位的操作,进而可以将转换后的数据存储在一个文件或者内存中,
* 同时也可以通过网络传输到另一个计算机环境,采取相反方式重构得到原数据。
* <p>
* 请设计一个算法来实现二叉树的序列化与反序列化。这里不限定你的序列 / 反序列化算法执行逻辑,
* 你只需要保证一个二叉树可以被序列化为一个字符串并且将这个字符串反序列化为原始的树结构。
* <p>
* 提示: 输入输出格式与 LeetCode 目前使用的方式一致,详情请参阅 LeetCode 序列化二叉树的格式。
* 你并非必须采取这种方式,你也可以采用其他的方法解决这个问题。
* <p>
* 示例 1:
* 输入:root = [1,2,3,null,null,4,5]
* 输出:[1,2,3,null,null,4,5]
* 示例 2:
* <p>
* 输入:root = []
* 输出:[]
* 示例 3:
* <p>
* 输入:root = [1]
* 输出:[1]
* 示例 4:
* <p>
* 输入:root = [1,2]
* 输出:[1,2]
*/
public class Codec {
String SEP = ",";
String NULL = "#";
/* 主函数,将二叉树序列化为字符串 */
public String serialize(TreeNode root) {
StringBuilder sb = new StringBuilder();
serialize(root, sb);
return sb.toString();
}
/* 辅助函数,将二叉树存入 StringBuilder */
void serialize(TreeNode root, StringBuilder sb) {
if (root == null) {
sb.append(NULL).append(SEP);
return;
}
/******前序遍历位置******/
sb.append(root.val).append(SEP);
/***********************/
serialize(root.left, sb);
serialize(root.right, sb);
}
/* 主函数,将字符串反序列化为二叉树结构 */
public TreeNode deserialize(String data) {
// 将字符串转化成列表
LinkedList<String> nodes = new LinkedList<>();
for (String s : data.split(SEP)) {
nodes.addLast(s);
}
return deserialize(nodes);
}
/* 辅助函数,通过 nodes 列表构造二叉树 */
TreeNode deserialize(LinkedList<String> nodes) {
if (nodes.isEmpty()) return null;
/******前序遍历位置******/
// 列表最左侧就是根节点
String first = nodes.removeFirst();
if (first.equals(NULL)) return null;
TreeNode root = new TreeNode(Integer.parseInt(first));
/***********************/
root.left = deserialize(nodes);
root.right = deserialize(nodes);
return root;
}
public class TreeNode {
int val;
TreeNode left;
TreeNode right;
TreeNode(int x) {
val = x;
}
}
}
Go
1
https://gitee.com/nateshao/leetcode.git
git@gitee.com:nateshao/leetcode.git
nateshao
leetcode
leetcode
main

搜索帮助

53164aa7 5694891 3bd8fe86 5694891