url https://leetcode.com/problems/serialize-and-deserialize-binary-tree/
本题使用层次遍历就行了,下面给出代码
/**
* Definition for a binary tree node.
*/
static public class TreeNode {
int val;
TreeNode left;
TreeNode right;
TreeNode(int x) { val = x; }
}
static public class Codec {
// Encodes a tree to a single string.
public String serialize(TreeNode root) {
StringBuilder res= new StringBuilder("");
if (root==null){
return "[]";
}
Queue<TreeNode> queue = new LinkedList<>();
queue.add(root);
res.append(root.val);
while(!queue.isEmpty()) {
int size = queue.size();
for(int i=0;i<size;i++) {
TreeNode cur = queue.poll();
if (cur.left == null) {
res.append(",null");
} else {
res.append(",").append(cur.left.val);
queue.add(cur.left);
}
if (cur.right == null) {
res.append(",null");
}else {
res.append(",").append(cur.right.val);
queue.add(cur.right);
}
}
}
return "["+res.toString()+"]";
}
// Decodes your encoded data to tree.
public TreeNode deserialize(String data) {
if (data==null || "".equals(data)) {
return null;
}
data = data.substring(1,data.length()-1);
String[] array = data.split(",");
Queue<TreeNode> queue = new LinkedList<>();
String val = array[0];
if (val==null || "".equals(val)){
return null;
}
int index = 0;
TreeNode root = new TreeNode(Integer.valueOf(val));
queue.add(root);
while(!queue.isEmpty()) {
int size = queue.size();
for (int i=0;i<size;i++) {
TreeNode cur = queue.poll();
if (!"null".equals(array[++index])) {
cur.left = new TreeNode(Integer.valueOf(array[index]));
queue.add(cur.left);
}
if (!"null".equals(array[++index])) {
cur.right = new TreeNode(Integer.valueOf(array[index]));
queue.add(cur.right);
}
}
}
return root;
}
}