import java.util.*;
/*
public class TreeNode {
int val = 0;
TreeNode left = null;
TreeNode right = null;
public TreeNode(int val) {
this.val = val;
}
}
*/
public class Solution {
private String res="";
private int index = 0;
//写一份辅助的递归函数(序列化)
void Serialize_help(TreeNode root) {
//判断当前节点是否为空?如果为空,将null加入到res中
if (root == null) {
//继续判断res是否为空,如果为空,直接加入
if (res.length()==0) {
res += "#";
return;
}
//如果res不为空,前面填逗号
else {
res += ",#";
return;
}
}
//当前节点不为空,将节点值加入到res中
else {
//再次判断res中是否为空!
if (res.length()==0) {
res += root.val;
}
else{
res+=",";
res+=root.val;
}
}
//先序遍历,中左右
Serialize_help(root.left);
Serialize_help(root.right);
}
String Serialize(TreeNode root) {
Serialize_help(root);
return res;
}
TreeNode Deserialize(String str) {
//用一个数组存放序列化的字符串
ArrayList<String> nodes = new ArrayList<>();
//将字符串按照逗号拆分
String[] str1 = str.split(",");
for(int i=0;i<str1.length;i++){
nodes.add(str1[i]);
}
return Deserialize_help(nodes);
}
TreeNode Deserialize_help(ArrayList<String> nodes){
//这里的equals是个坑!!!!!
if(nodes.get(index).equals("#")){
index++;
return null;
}
//不为空则取出当前的数组数据,创建对应节点
TreeNode node = new TreeNode(Integer.parseInt(nodes.get(index)));
index++;
//递归创建左子树和右子树
node.left = Deserialize_help(nodes);
node.right = Deserialize_help(nodes);
return node;
}
}