将二叉树输出到文本中长期保存,序列化时候需要注意到两点
① 每个节点之间都要有效的分隔看,不然为否判断
②节点的子节点为空也要选择特定的符号写入,不然无法知道谁是谁的子树
③ 使用什么遍历方法序列化就要使用什么方法反序列化
序列化代码
public static String serize(TreeNodes node){
if(node==null){
return "#!";
}
String str=node.index+"!";
str+=serize(node.left);
str+=serize(node.right);
return str;
}
利用递归实现序列化的结果就是 父节点的字符串表示+左右节点的字符串表示 。 分隔符为! NULL表示符为#。
public static TreeNodes preSerize(String str){
String[] args =str.split("!");
Queue<String> que =new ConcurrentLinkedQueue<>();
for(String temp:args){
que.add(temp);
}
return preTree(que);
}
public static TreeNodes preTree(Queue que){
String value =(String)que.poll();
if(value.equals("#")){
return null;
}
TreeNodes node =new TreeNodes(Integer.valueOf(value));
node.left=preTree(que);
node.right=preTree(que);
return node;
}