解题思路:
(1)这里因为返回是字符指针,正好练习下C语言
(2)首先申请一段足够的内存,例如char *s = (char*)calloc(256,sizeof(char))
(3)接下来先序遍历,使用sprintf将数字写入字符数组中,用strcat连接字符串
(4)记得最后消去末尾的'#'
(5)因为字符串是用','分割的,这里使用strtok分割字符串,依次新建新的结点
class Solution {
public:
const char *p = "#,";
char* Serialize(TreeNode *root) {
char *s = (char*)calloc(256,sizeof(char));
enorder(s,root);
s[strlen(s)-1]='\0';
return s;
}
void enorder(char *s,TreeNode *root) {
if(root!=NULL) {
char buf[10];
sprintf(buf,"%d,",root->val);
strcat(s,buf);
enorder(s,root->left);
enorder(s,root->right);
} else strcat(s,p);
}
TreeNode* Deserialize(char *str) {
int i = 0;
TreeNode *root = NULL;
char *token = strtok(str,",");
deorder(root,token);
return root;
}
void deorder(TreeNode *&root,char *str) {
if(str) {
if(str[0]=='#') {
root=NULL;return;
} else {
root = (TreeNode*)calloc(1,sizeof(TreeNode));
root->val = atoi(str);
str = strtok(NULL, ",");
deorder(root->left,str);
str = strtok(NULL, ",");
deorder(root->right,str);
}
} else return;
}
};