题目
序列化是将数据结构或对象转换为一系列位的过程,以便它可以存储在文件或内存缓冲区中,或通过网络连接链路传输,以便稍后在同一个或另一个计算机环境中重建。
设计一个算法来序列化和反序列化 二叉搜索树 。 对序列化/反序列化算法的工作方式没有限制。 您只需确保二叉搜索树可以序列化为字符串,并且可以将该字符串反序列化为最初的二叉搜索树。
编码的字符串应尽可能紧凑。
示例
输入: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;
}
}

这篇博客介绍了如何设计算法来序列化和反序列化二叉搜索树。序列化是将树转换为字符串,而反序列化则是从字符串重建原来的树。作者提供了Java实现的代码示例,包括使用字符串缓冲区进行序列化以及利用链表进行反序列化的方法。这些方法确保了序列化的字符串紧凑且能够正确还原二叉搜索树的结构。

738

被折叠的 条评论
为什么被折叠?



