题目描述
请实现两个函数,分别用来序列化和反序列化二叉树
这个有点难哎,我要回头再看一下
class Solution {
public:
char * Str2Char( string str)
{
char * rt_ptr = new char[str.length() + 1];
rt_ptr [str.length()] = '\0';
memcpy(rt_ptr , str.c_str() , str.length());
return rt_ptr;
}
char* Serialize(TreeNode *root)
{
string rt_str ;
if(root == NULL){
rt_str = "$,";
return Str2Char(rt_str);
}
else
{
rt_str = to_string(root->val);
rt_str+=",";
}
char * left = Serialize(root->left);
char *right = Serialize(root->right);
string left_str(left);
string right_str(right);
delete []left ;
delete []right;
rt_str += left_str;
rt_str += right_str;
return Str2Char(rt_str);
}
TreeNode * DeserializeFromString(string &str_ref){
size_t pos = str_ref.find_first_of(",");
string tmp = str_ref.substr(0,pos);
str_ref = str_ref.substr(pos+1 , str_ref.length() - pos - 1);
if(tmp == "$"){
return NULL;
}else {
TreeNode * rt_ptr = new TreeNode(atoi(tmp.c_str()));
rt_ptr-> left = DeserializeFromString(str_ref);
rt_ptr-> right = DeserializeFromString(str_ref);
return rt_ptr;
}
}
TreeNode* Deserialize(char *str) {
if(str == NULL) return NULL;
string input_str(str);
return DeserializeFromString(input_str);
}
};