查细节花了好久,,欲哭无泪
时间限制:1秒 空间限制:32768K 热度指数:137899
题目描述
请实现两个函数,分别用来序列化和反序列化二叉树
序列化:
//使用前序遍历序列化二叉树
String Serialize(TreeNode root) {
if(root==null) return null;
StringBuilder res= new StringBuilder();
SerializeCore(root, res);
return res.toString();
}
void SerializeCore(TreeNode root, StringBuilder res){
if(root==null){
res.append("#,");
return; //细节1:如果该情况处理完就返回应该加return,并括在一起啊!!!
}
res.append(root.val+",");
SerializeCore(root.left, res);
SerializeCore(root.right, res);
}
反序列化
//反序列化:根据某种遍历方式得到的序列化字符串结果,重构二叉树
TreeNode Deserialize(String str) {
if(str==null) return null;
String[] str1= str.split(",");
TreeNode root= null;
root= DeserializeCore(str1, root);
return root;
}
int index= -1;
TreeNode DeserializeCore(String[] str1, TreeNode root){
index++;
if(index>=str1.length) return null;
if(!str1[index].equals("#")){//细节2:基本类型封装后或字符串不能用单纯的==来判断相等
root= new TreeNode(Integer.valueOf(str1[index]));
root.left= DeserializeCore(str1, root.left);
root.right= DeserializeCore(str1, root.right);
}
return root;
}