/**
* struct TreeNode {
* int val;
* struct TreeNode *left;
* struct TreeNode *right;
* };
*/
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param root TreeNode类
* @return char字符型一维数组
*/
void TreeToStr(struct TreeNode* Node, char* str, int* cur) {
// 如果是空节点,我们用#号表示。
if(Node == NULL) {
(str)[*cur] = '#';
(*cur)++;
(str)[*cur] = ',';
(*cur)++;
return;
} else {
if(Node->val > 99) {
(str)[*cur] = '1';
(*cur)++;
(str)[*cur] = Node->val / 10 % 10 + 48;
(*cur)++;
(str)[*cur] = Node->val % 10 + 48;
(*cur)++;
} else if(Node->val > 9) {
(str)[*cur] = Node->val / 10 % 10 + 48;
(*cur)++;
(str)[*cur] = Node->val % 10 + 48;
(*cur)++;
} else {
(str)[*cur] = Node->val + 48;
(*cur)++;
}
(str)[*cur] = ',';
(*cur)++;
TreeToStr(Node->left, str, cur);
TreeToStr(Node->right, str, cur);
}
}
char* Serialize(struct TreeNode* root ) {
// write code here
char* str = (char*)malloc(500 * sizeof(char));
int cur = 0;
TreeToStr(root, str, &cur);
str[cur] = '\0';
printf("%s\n", str);
return str;
}
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param str char字符型一维数组
* @return TreeNode类
*/
struct TreeNode* StrToTree(char* str, int* cur) {
if((*(str + (*cur))) == '#') {
(*cur) += 2;
return NULL;
}
struct TreeNode *Node = (struct TreeNode*)malloc(sizeof(struct TreeNode));
Node->val = 0;
while(*(str + (*cur)) != ',') {
Node->val = (Node->val * 10) + (*(str + (*cur))) - 48;
(*cur)++;
}
(*cur)++;
printf("%d", (*cur));
printf("%c", (*(str + (*cur))));
Node->left = NULL;
Node->right = NULL;
Node->left = StrToTree(str, cur);
Node->right = StrToTree(str, cur);
return Node;
}
struct TreeNode* Deserialize(char* str ) {
// write code here
struct TreeNode* root = NULL;
int cur = 0;
root = StrToTree(str, &cur);
return root;
}