您的位置:首页 > 其它

二叉树的序列化和反序列化

2016-04-08 14:43 351 查看
开始感觉有点难

主要是要运用递归的方式

采用先序列遍历来序列化节点

注意要delete掉中间内存

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);
}
};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);
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: