题目描述
请实现两个函数,分别用来序列化和反序列化二叉树
思路:
前序遍历加上“#”作为结尾
坑:
string s;
char* res=s.c_str();//报错~~~
/*必须这样*/
char* res=new char[s.size()+1];
strncpy(res,s.c_str(),s.size());
牛客不能用itoa,得自己写
/*
struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
TreeNode(int x) :
val(x), left(NULL), right(NULL) {
}
};
*/
class Solution {
public:
char* Serialize(TreeNode *root) {
string s=SerializeCore(root);
char* res=new char[s.size()+1];
strncpy(res,s.c_str(),s.size());
res[s.size()] = '\0';
return res;
}
string SerializeCore(TreeNode* root)
{
if(root==NULL)
return "#";
string s=to_string(root->val)+",";
s+=SerializeCore(root->left);
s+=SerializeCore(root->right);
return s;
}
TreeNode* Deserialize(char *str) {
if(str==NULL)
return NULL;
return DeserializeCore(str);
}
TreeNode* DeserializeCore(char*& str)
{
int num = 0;
if(*str=='#'){
str++;
return NULL;
}
else
{
while(*str != '\0' && *str != ','){
num = num*10 + ((*str) - '0');
str++;
}
TreeNode *root = new TreeNode(num);
if(*str=='\0')
return root;
else
str++;
root->left=DeserializeCore(str);
root->right=DeserializeCore(str);
return root;
}
}
};