题目:
题解:
#define MAX_SIZE 100000
#define STR_SIZE 10
void pre_order(struct TreeNode *root, char * data){
if(root == NULL){
strcat(data, "#");
strcat(data, ",");
return;
}
char tmp[STR_SIZE] = "";
sprintf(tmp, "%d", root->val); // 技巧
strcat(data, tmp);
strcat(data, ",");
pre_order(root->left, data);
pre_order(root->right, data);
}
char* serialize(struct TreeNode* root) {
char * ans = malloc(sizeof(char) * MAX_SIZE);
memset(ans, '\0', sizeof(char) * MAX_SIZE);
pre_order(root, ans);
return ans;
}
struct TreeNode * createTree(char *data, int *index){
if(data[*index] == '#'){
(*index)++; // ‘#’
(*index)++; // ‘,’
return NULL;
}
struct TreeNode * root = malloc(sizeof(struct TreeNode));
char tmp[STR_SIZE] = "";
int k = 0;
while(data[*index] != ','){
tmp[k++] = data[*index];
(*index)++;
}
(*index)++; // 因为此时data[*index] = ','
root->val = atoi(tmp); // 获取数值
root->left = createTree(data, index); // 递归左子树
root->right = createTree(data, index); // 递归右子树
return root;
}
struct TreeNode* deserialize(char* data) {
int index = 0; // index表示数组下标,不需要回溯
return createTree(data, &index);
}