题目
序列化是将数据结构或对象转换为一系列位的过程,以便它可以存储在文件或内存缓冲区中,或通过网络连接链路传输,以便稍后在同一个或另一个计算机环境中重建。
设计一个算法来序列化和反序列化 二叉搜索树 。 对序列化/反序列化算法的工作方式没有限制。 您只需确保二叉搜索树可以序列化为字符串,并且可以将该字符串反序列化为最初的二叉搜索树。
编码的字符串应尽可能紧凑。
示例
输入:root = [2,1,3]
输出:[2,1,3]
输入:root = []
输出:[]
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/serialize-and-deserialize-bst
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
方法1
Java实现
public class Codec {
// Encodes a tree to a single string.
public String serialize(TreeNode root) {
StringBuffer res = new StringBuffer();
serializeT(root, res);
return res.toString();
}
public void serializeT(TreeNode root, StringBuffer res) {
if (root == null) {
res.append("#").append(",");
return;
} else {
res.append(root.val).append(",");
}
serializeT(root.left, res);
serializeT(root.right, res);
}
// Decodes your encoded data to tree.
public TreeNode deserialize(String data) {
LinkedList<String> nodes = new LinkedList<>();
for (String s : data.split(",")) {
nodes.add(s);
}
return deserializeT(nodes);
}
public TreeNode deserializeT(LinkedList<String> nodes) {
if (nodes.size() == 0) return null;
String first = nodes.removeFirst();
if (first.equals("#")) {
return null;
}
TreeNode root = new TreeNode(Integer.parseInt(first));
root.left = deserializeT(nodes);
root.right = deserializeT(nodes);
return root;
}
}