题目其实就是将二叉树转化成字符串同时保留树的空间信息.可以用空占位符占住空节点的位置,用来描述树的实际结构.
先序遍历的方式序列化代码如下:
public static String serialByPre(Node head){
if(head == null){
return "#_";
}
String res = head.data + "_";
res += serialByPre(head.left);
res += serialByPre(head.right);
return res;
}
反序列化还是按照中 > 左 > 右的先序遍历顺序拼接
public static Node deserialPre(String str){
String [] values = str.split("_");
Queue<String> queue = new LinkedList<String>();
for(int i = 0; i < values.length; i++){
queue.offer(values[i]);
}
return deserialPre(queue);
}
public static Node deserialPre(Queue<String> queue){
String value = queue.poll();
if(value.equals("#")){
return null;
}
Node head = new Node(Integer.valueOf(value));
head.left = deserialPre(queue);
head.right = deserialPre(queue);
return head;
}