剑指 Offer II 048. 序列化与反序列化二叉树
思路 :
序列化 : 对树做先序遍历,中 -》左-》右的方式加入string,若为空值用"#"代替
string serialize(TreeNode*& root) {
if(root==nullptr)
return "#";
string s ;
s = to_string(root->val);
string left = serialize(root->left);
string right = serialize(root->right);
s = s+","+left+","+right;
// cout<<s<<endl;
return s;
}
反序列化 :对字符串进行处理,加入vector中
对vector进行先序遍历复原二叉树
TreeNode* deserialize(string data) {
vector<string> v ;
//先对字符串进行处理
for(int i = 0 ; i < data.size() ; i++){
if(data[i]=='#'){
v.push_back("#");
continue;
}
if(data[i]==','){
continue;
}
string obj ;
obj = data[i];
i++;
while(i< data.size()&&isdigit(data[i])){
obj+=data[i++];
}
i--;
v.push_back(obj);
}
TreeNode* root = new TreeNode(0);
int i = 0 ;
dfs(root,i,v);
return root;
}