題目描述
請實現兩個函數,分別用來序列化和反序列化二叉樹
import java.util.ArrayList;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.Queue;
/*
public class TreeNode {
int val = 0;
TreeNode left = null;
TreeNode right = null;
public TreeNode(int val) {
this.val = val;
}
}
*/
public class Solution {
String Serialize(TreeNode root) {
StringBuilder sb=new StringBuilder();
Queue<TreeNode> queue =new LinkedList<TreeNode>();
if(root!=null){
queue.add(root);
}
while(!queue.isEmpty()){
TreeNode node=queue.poll();
if(node!=null){
queue.offer(node.left);
queue.offer(node.right);
sb.append(node.val+",");
}else{
sb.append("#"+",");
}
}
if(sb.length()!=0){
sb.deleteCharAt(sb.length()-1);
}
return sb.toString();
}
TreeNode Deserialize(String str) {
if(str==null || str.length()==0){
return null;
}
String[] nodes=str.split(",");
TreeNode[] treeNodes=new TreeNode[nodes.length];
for(int i=0;i<nodes.length;i++){
if(!nodes[i].equals("#")){
treeNodes[i]=new TreeNode(Integer.parseInt(nodes[i]));
}
}
int j=1;
for(int i=0;j<treeNodes.length;i++){
if(treeNodes[i]!=null){
treeNodes[i].left=treeNodes[j++];
treeNodes[i].right=treeNodes[j++];
}
}
return treeNodes[0];
}
}