题目描述
请实现两个函数,分别用来序列化和反序列化二叉树
思路
序列化就是把一棵树按照某种序列,转化成字符串,反序列化反之。
1
2 3
4 5 6
先序序列化是 1,2,4,#,#,#,3,5,#,#,6,#,#
递归实现
code
/*
struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
TreeNode(int x) :
val(x), left(NULL), right(NULL) {
}
};
*/
class Solution {
public:
void serialize(TreeNode *root,string &s){
if(root==nullptr){
s=s+'#'+',';
return;
}
s=s+to_string(root->val)+",";
serialize(root->left,s);
serialize(root->right,s);
}
char* Serialize(TreeNode *root) {
string res="";
if(root==nullptr)
return nullptr;
serialize(root,res);
char *ret = new char[res.length() + 1];
strcpy(ret, res.c_str());
return ret;
}
TreeNode *deserializeHelper(string &s)
{
if (s.empty())
return nullptr;
if (s[0] == '#')
{
s = s.substr(2);
return nullptr;
}
TreeNode *ret = new TreeNode(stoi(s));
s = s.substr(s.find_first_of(',') + 1);
ret->left = deserializeHelper(s);
ret->right = deserializeHelper(s);
return ret;
}
TreeNode* Deserialize(char *str) {
if(str==nullptr)
return nullptr;
string s=str;
return deserializeHelper(s);
}
};