序列化与反序列化有很多的方法,但是基本关键点只有一种那就是将各个数字分割开来。
String diviStr = "!";
String emptyNode = "#";
public String serialize(TreeNode root) {
StringBuffer sb = new StringBuffer();
if (root == null) {
return sb.toString();
}
preOrder(root, sb);
return sb.toString();
}
public void preOrder(TreeNode root, StringBuffer sb) {
if (root == null) {
sb.append(emptyNode).append(diviStr);
} else {
sb.append(root.val).append(diviStr);
preOrder(root.left, sb);
preOrder(root.right, sb);
}
}
public TreeNode deserialize(String data) {
LinkedList<String> list = new LinkedList<>();
list.addAll(Arrays.asList(data.split("!")));
return preOrderCreate(list);
}
public TreeNode preOrderCreate(LinkedList<String> list) {
String str = list.poll();
if (str.equals(emptyNode)) {
return null;
} else {
TreeNode node = new TreeNode(Integer.parseInt(str));
node.left = preOrderCreate(list);
node.right = preOrderCreate(list);
return node;
}
}