/** * 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; }