题目
请实现两个函数,分别用来序列化和反序列化二叉树。
实现
public class Codec {
// Encodes a tree to a single string.
public String serialize(TreeNode root) {
if(root == null){
return "#!";
}
String str = root.val + "!";
str += serialize(root.left);
str += serialize(root.right);
return str;
}
// Decodes your encoded data to tree.
public TreeNode deserialize(String data) {
String[] values = data.split("!");
Queue<String> queue = new LinkedList<String>();
for(int i = 0; i < values.length; i++){
queue.offer(values[i]);
}
return recordPreOrder(queue);
}
public TreeNode recordPreOrder(Queue<String> queue){
String value = queue.poll();
if("#".equals(value)){
return null;
}
TreeNode node = new TreeNode(Integer.valueOf(value));
node.left = recordPreOrder(queue);
node.right = recordPreOrder(queue);
return node;
}
}