题目:
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.
/**
* 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) {
//遍历二叉树
if(root==null) return "#,";
String str=String.valueOf(root.val)+",";
str+=serialize(root.left);
str+=serialize(root.right);
return str;
}
// Decodes your encoded data to tree.
public TreeNode deserialize(String data) {
String [] strs=data.split(",");
Queue<String> qu=new LinkedList<>();
for(String s:strs){
qu.add(s);
}
return generateTree(qu);
}
//构造树
public TreeNode generateTree(Queue<String> qu){
String val=qu.poll();
if(val.equals("#")){
//说明为空
return null;
}
TreeNode root=new TreeNode(Integer.valueOf(val));
//递归将数据生成二叉树
root.left=generateTree(qu);
root.right=generateTree(qu);
return root;
}
}
// Your Codec object will be instantiated and called as such:
// Codec codec = new Codec();
// codec.deserialize(codec.serialize(root));