题目:
序列化是将数据结构或对象转换为一系列位的过程,以便它可以存储在文件或内存缓冲区中,或通过网络连接链路传输,以便稍后在同一个或另一个计算机环境中重建。
设计一个算法来序列化和反序列化 二叉搜索树 。 对序列化/反序列化算法的工作方式没有限制。 您只需确保二叉搜索树可以序列化为字符串,并且可以将该字符串反序列化为最初的二叉搜索树。
编码的字符串应尽可能紧凑。
解析:
编码其实就是把Treenode中的值取出来,转化为字符串。
解码就是将字符串的值取出来,每个值依次初始化为Treenode,然后生成一个二叉查找树。
代码:
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
public class Codec {
public StringBuilder preorder(TreeNode root, StringBuilder sb) {
if (root == null)
return sb;
sb.append(root.val);
sb.append(" ");
preorder(root.left, sb);
preorder(root.right, sb);
return sb;
}
// Encodes a tree to a single string.
public String serialize(TreeNode root) {
StringBuilder sb = preorder(root, new StringBuilder());
return sb.toString();
}
// Decodes your encoded data to tree.
public TreeNode BST_insert(TreeNode node,TreeNode insert_node){
System.out.print(node.val+" "+insert_node.val+"... ");
if(insert_node.val<node.val){
if(node.left!=null){
BST_insert(node.left,insert_node);
}else{
node.left=insert_node;
}
}else{
if(node.right!=null){
BST_insert(node.right,insert_node);
}else{
node.right=insert_node;
}
}
return node;
}
// Decodes your encoded data to tree.
public TreeNode deserialize(String data) {
System.out.println(data+"输入数据");
if(data.length()==0){
return null;
}
List<TreeNode> node=new ArrayList<TreeNode>();
for (String s : data.split("\\s+"))
node.add(new TreeNode(Integer.valueOf(s)));
TreeNode root=new TreeNode(node.get(0).val);
for(int i=1;i<node.size();i++){
BST_insert(root,node.get(i));
}
return root;
}
}
// Your Codec object will be instantiated and called as such:
// Codec ser = new Codec();
// Codec deser = new Codec();
// String tree = ser.serialize(root);
// TreeNode ans = deser.deserialize(tree);
// return ans;
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/serialize-and-deserialize-bst
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。