二叉树的序列化和反序列化
二叉树记录成文件(一般是字符串形式)的过程叫做序列化,通过文件内容重构出一颗二叉树的过程叫做二叉树的反序列化。
方法一:通过先序遍历实现序列化和反序列化
序列化:1
2
3
4
5
6
7
8
9class Node {
public int value;
public Node left;
public Node right;
public Node (int data) {
this.value = data;
}
}
1 | public class SerialByPre { |
反序列化:
反序列化函数:1
2
3
4
5
6
7
8public static Node reconByPreString (String preStr) {
String[] strs = preStr.split("_");
Queue<String> queue = new LinkedList<String>();
for (int i = 0; i < strs.length; i++) {
queue.offer(strs[i]);
}
return reconPreOrder(queue);
}
reconPreNode函数:
作用是从一个字符串重构出一棵二叉树1
2
3
4
5
6
7
8
9
10 public static Node reconPreNode(Queue<String> queue) {
String value = queue.poll();
if (value.equals("#")) {
return null;
}
Node head = new Node(Integer.valueOf(value));
head.left = reconPreNode(queue);
head.right = reconPreNode(queue);
return head;
}
方法二:通过先序遍历实现序列化和反序列化
1 | public static String serialByLevel (Node head) { |
1 | public static Node reconByLevelString(String levelStr) { |
以上方法二是按层序列化二叉树和反序列化构造出一颗二叉树的代码。