package pers.machi;
import com.google.common.base.Joiner;
import java.util.*;
public class BinaryTreeSerde {
public static void main(String[] args) throws InterruptedException {
TreeNode root4 = new TreeNode(4);
TreeNode node3 = new TreeNode(3);
TreeNode node7 = new TreeNode(7);
TreeNode node6 = new TreeNode(6);
TreeNode node8 = new TreeNode(8);
root4.left = node3;
root4.right = node7;
node7.left = node6;
node7.right = node8;
List<TreeNode> serializedTree = serialize(root4);
System.out.println(Joiner.on(",").useForNull("null").join(serializedTree));
System.out.println(Joiner.on(",").useForNull("null").join(
serialize(deserialize(serializedTree))));
}
public static List<TreeNode> serialize(TreeNode root) {
List<TreeNode> serializedTree = new LinkedList<>();
Queue<TreeNode> queue = new LinkedList<>();
queue.offer(root);
while (!queue.isEmpty()) {
TreeNode current = queue.poll();
if (current != null) {
queue.offer(current.left);
queue.offer(current.right);
}
serializedTree.add(current);
}
return serializedTree;
}
public static TreeNode deserialize(List<TreeNode> serializedTree) throws InterruptedException {
Queue<TreeNode> serializedTreeQueue = (Queue) serializedTree;
int num=serializedTreeQueue.size();
Queue<TreeNode> waitTBPorcess = new LinkedList<>();
TreeNode root = serializedTreeQueue.poll();
waitTBPorcess.offer(root);
int cnt=0;
while (cnt<num) {
Thread.sleep(100);
TreeNode left = serializedTreeQueue.poll();
TreeNode right = serializedTreeQueue.poll();
TreeNode current = waitTBPorcess.poll();
cnt++;
System.out.println(current+" "+cnt);
if (current != null) {
current.left = left;
current.right = right;
}
waitTBPorcess.offer(left);
waitTBPorcess.offer(right);
}
return root;
}
}
转载请注明原文地址:https://ipadbbs.8miu.com/read-57178.html