题目描述
Serialization is the process of converting a data structure or object into a sequence of bits so that it can be stored in a file or memory buffer, or transmitted across a network connection link to be reconstructed later in the same or another computer environment.
Design an algorithm to serialize and deserialize a binary search tree. There is no restriction on how your serialization/deserialization algorithm should work. You just need to ensure that a binary search tree can be serialized to a string and this string can be deserialized to the original tree structure.
The encoded string should be as compact as possible.
Note: Do not use class member/global/static variables to store states. Your serialize and deserialize algorithms should be stateless.
题目链接
https://leetcode.com/problems/serialize-and-deserialize-bst/
方法思路
public class Codec {
//Runtime: 6 ms, faster than 84.94%
//Memory Usage: 40.1 MB, less than 43.69%
// Encodes a tree to a single string.
public String serialize(TreeNode root) {
if(root == null){
return null;
}
StringBuffer sb = new StringBuffer();
serializeCore(root, sb);
return sb.toString();
}
// Decodes your encoded data to tree.
public TreeNode deserialize(String data) {
if(data == null){
return null;
}
String[] nodes = data.split(",");
TreeNode res = deserializeCore(nodes, 0, nodes.length - 1);
return res;
}
//前序序列化
private void serializeCore(TreeNode root, StringBuffer sb){
if(root == null){
return;
}
sb.append(root.val);
sb.append(",");
serializeCore(root.left, sb);
serializeCore(root.right, sb);
}
//前序反序列化
private TreeNode deserializeCore(String[] nodes, int start, int end){
if(start > end){
return null;
}
if(start == end){
return new TreeNode(Integer.parseInt(nodes[start]));
}
TreeNode root = new TreeNode(Integer.parseInt(nodes[start]));
int index = start + 1;
while(index <= end && Integer.parseInt(nodes[index]) < Integer.parseInt(nodes[start])){
++index;
}
root.left = deserializeCore(nodes, start + 1, index - 1);
root.right = deserializeCore(nodes, index, end);
return root;
}
}