实战
题目
剑指 Offer 37. 序列化二叉树
请实现两个函数,分别用来序列化和反序列化二叉树。
解答
public class TreeNode {
int val;
TreeNode left;
TreeNode right;
TreeNode(int x) { val = x; }
}
public class Codec {
public String serialize(TreeNode root) {
if(root == null){
return null;
}
Queue<TreeNode> queue = new LinkedList<>();
queue.add(root);
StringBuilder sb = new StringBuilder();
while(!queue.isEmpty()){
TreeNode node = queue.poll();
if(node == null){
sb.append("#").append(",");
continue;
}
sb.append(node.val).append(",");
queue.add(node.left);
queue.add(node.right);
}
String res = sb.toString();
return res.substring(0, res.length() - 1);
}
public TreeNode deserialize(String data) {
if(null == data || "".equals(data)){
return null;
}
String[] sArr = data.split(",");
TreeNode root = new TreeNode(Integer.parseInt(sArr[0]));
Queue<TreeNode> queue = new LinkedList<>();
queue.add(root);
for(int i = 1; i < sArr.length; i++){
TreeNode node = queue.poll();
if(!"#".equals(sArr[i])){
TreeNode left = new TreeNode(Integer.parseInt(sArr[i]));
node.left = left;
queue.add(left);
}
if(!"#".equals(sArr[++i])){
TreeNode right = new TreeNode(Integer.parseInt(sArr[i]));
node.right = right;
queue.add(right);
}
}
return root;
}
}