题目描述
请实现两个函数,分别用来序列化和反序列化二叉树
/*
struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
TreeNode(int x) :
val(x), left(NULL), right(NULL) {
}
};
*/
class Solution {
public:
int strToInt(string str)
{
stringstream sout;
sout << str;
int ans;
sout >> ans;
return ans;
}
string intToStr(int n)
{
ostringstream sout;
sout << n;
return sout.str();
}
string charToStr(char *c)
{
ostringstream sout;
sout << c;
return sout.str();
}
string serialize(TreeNode *root)
{
if(!root)
return "# ";
string str = intToStr(root->val) + " ";
str += serialize(root->left);
str += serialize(root->right);
return str;
}
char* Serialize(TreeNode *root)
{
string str = serialize(root);
const char *cs = str.data();
char cstr[10000];
strcpy(cstr, cs);
return cstr;
}
TreeNode* deserialize(queue<string> &q)
{
if(q.empty())
return NULL;
string str = q.front();
q.pop();
if(str == "#")
return NULL;
TreeNode* root = new TreeNode(strToInt(str));
root->left = deserialize(q);
root->right = deserialize(q);
return root;
}
TreeNode* Deserialize(char *str)
{
queue<string> q;
char *d = " ";
char *s = strtok(str, d);
while(s)
{
q.push(charToStr(s));
s = strtok(NULL, d);
}
return deserialize(q);
}
};