下面代码是先序序列化和反序列化
反序列化没有中序,无法确认head的位置
序列化如果中序和后序,只是队列加入放在递归的顺序有变化
pres(head.left, queue);
queue.add(String.valueOf(head.value));
pres(head.right, queue);
pres(head.left, queue);
pres(head.right, queue);
queue.add(String.valueOf(head.value));
二叉树序列化到队列(先序)
//二叉树序列化,里面要注意的就是,为了保证反序列化之后的结果,空节点要用null来占位
public static Queue<String> preSerializable(Node head){
Queue<String> queue = new LinkedList<>();
pres(head,queue);
return queue;
}
public static void pres(Node head,Queue<String> queue){
if(head == null){
queue.add(null);
}else {
queue.add(String.valueOf(head.value));
pres(head.left, queue);
pres(head.right, queue);
}
}
二叉树反序列化成Node(先序)
public static Node BuildByQueue(Queue<String> queue){
if(queue == null || queue.size() == 0){
return null;
}
return preb(queue);
}
public static Node preb(Queue<String> queue){
String value = queue.poll();
if(value == null){
return null;
}
Node head = new Node(Integer.valueOf(value));
head.left = preb(queue);
head.right = preb(queue);
return head;
}
Node结构
public static class Node{
private int value;
private Node left;
private Node right;
public Node() {
}
public Node(int value) {
this.value = value;
}
public int getValue() {
return value;
}
public void setValue(int value) {
this.value = value;
}
public Node getLeft() {
return left;
}
public void setLeft(Node left) {
this.left = left;
}
public Node getRight() {
return right;
}
public void setRight(Node right) {
this.right = right;
}
}