题目描述
请实现两个函数,分别用来序列化和反序列化二叉树
思路:用递归实现:序列化二叉树,按照中序遍历二叉树的顺序,先左节点,后右节点,当到‘#’时候,说明左节点或者右节点为NULL,
同样反序列二叉树也一个道理,需要注意的是在序列和反序列二叉树的时候,注意字符串与整数的转换,一般字符串转换为整数,用迭代
循环实现,整数转换为字符串可以用
sprintf
实现或者itoa实现;
代码:
char* Serialize(TreeNode *root) {
if(root == NULL)
return NULL;
string s;
Serialize1(root,s);
s[s.size()-1] = '\0';
return const_cast<char*>(s.c_str());
}
void Serialize1(TreeNode* root,string s){
if(root == NULL){
s += "$,";
return;
}
char a[10];
sprintf(a,"%d",root->val);
s += a;
s += ",";
Serialize1(root->left,s);
Serialize1(root->right,s);
}
TreeNode* Deserialize(char *str) {
if(str == NULL || *str == '\0')
return NULL;
int num = 0;
return Deserialize1(str,num);
}
TreeNode* Deserialize1(char* str,int &num){
int val = 0;
if(str[num] == '\0')
return NULL;
if(str[num] == '$'){
num += 2;
return NULL;
}
while(str[num] != ',' && str[num] != '\0'){
val = val*10+str[num]-'0';
num++;
}
if(str[num] == '\0')
;
else
num++;
TreeNode *root=new TreeNode(val);
root->left=Deserialize1(str,num);
root->right=Deserialize1(str,num);
return root;
}