https://leetcode.com/problems/serialize-and-deserialize-binary-tree/
https://leetcode.com/problems/serialize-and-deserialize-bst/
序列化和反序列化二叉树
public class Codec {
// Encodes a tree to a single string.
public String serialize(TreeNode root) {
StringBuilder sb = new StringBuilder();
Queue<TreeNode> queue = new LinkedList();
queue.offer(root);
while (!queue.isEmpty()) {
int size = queue.size();
for (int i = 0; i < size; i++) {
TreeNode node = queue.poll();
if (node == null) {
sb.append(",null");
} else {
sb.append("," + node.val);
queue.offer(node.left);
queue.offer(node.right);
}
}
}
sb.deleteCharAt(0);
return sb.toString();
}
// Decodes your encoded data to tree.
public TreeNode deserialize(String data) {
String[] arr = data.split(",");
if (arr[0].equals("null")) {
return null;
}
TreeNode root = new TreeNode(Integer.parseInt(arr[0]));
Queue<TreeNode> queue = new LinkedList();
queue.offer(root);
int index = 1;
while (!queue.isEmpty()) {
int size = queue.size();
for (int i = 0; i < size; i++) {
TreeNode node = queue.poll();
if (node == null) {
continue;
}
TreeNode left = arr[index].equals("null") ? null : new TreeNode(Integer.parseInt(arr[index]));
index++;
TreeNode right = arr[index].equals("null") ? null : new TreeNode(Integer.parseInt(arr[index]));
index++;
node.left = left;
node.right = right;
queue.offer(left);
queue.offer(right);
}
}
return root;
}
}