请实现两个函数,分别用来序列化和反序列化二叉树
思路是看大佬们的文章学到的,然后整理思路自己敲一遍。
无论采用何种遍历方式序列化二叉树,反序列化时采用相同的方式即可,不过先序遍历的方式来反序列化比较简单。
/*
public class TreeNode {
int val = 0;
TreeNode left = null;
TreeNode right = null;
public TreeNode(int val) {
this.val = val;
}
}
*/
import java.io.*;
public class Solution {
String Serialize(TreeNode root) {
StringBuilder sb=new StringBuilder();
pre(root,sb);
return sb.toString();
}
public void pre(TreeNode root,StringBuilder sb){
if(root==null){
sb.append("#!");
return ;
}
else{
sb.append(root.val+"!");
pre(root.left,sb);
pre(root.right,sb);
}
}
TreeNode Deserialize(String str) {
if(str==null||str=="")
return null;
String[] strs=str.split("!");
TreeNode root=deSerialize(strs);
return root;
}
private int index=0;
public TreeNode deSerialize(String[] strs){
if("#".equals(strs[index])){
index++;
return null;
}else{
TreeNode root=new TreeNode(Integer.parseInt(strs[index]));
index++;
root.left=deSerialize(strs);
root.right=deSerialize(strs);
return root;
}
}
}