树的序列化和反序列化

序列化二叉树

https://www.nowcoder.com/practice/cf7e25aa97c04cc1a68c8f040e71fb84?tpId=13&tqId=11214&tPage=1&rp=1&ru=/ta/coding-interviews&qru=/ta/coding-interviews/question-ranking

这破题,可是做死我了,数组还有引用使用
前序遍历,其实思路是清晰明确的,问题出就出在string想char转换时,必须先给char数组指定长度,太气了。*strcpy(char,s.c_str());在这步操作前,必须要先对char指定长度。**
class Solution {
public:
char
Serialize(TreeNode *root) {
if(!root) return NULL;
string s;
ser(root,s);

    char *res = new char[s.size() + 1];
    strcpy(res,s.c_str());
    return res;
}

void ser(TreeNode *root,string &s){
    if(!root){
        s += '#';
        return;
    }
    s += to_string(root->val);
    s += '!';
    ser(root->left,s);
    ser(root->right,s);
    return;
}
TreeNode* Deserialize(char* str) {
    if(!str) return NULL;
    return deser(str);
}

TreeNode* deser(char* &str){
    if(*str == '#'){
        str++;
        return NULL;
    }
    int num = 0;
    while(*str != '\0' && *str != '!'){
        num = num*10 + *str - '0';
        str++;
    }
    TreeNode *root = new TreeNode(num);
    if(*str == '\0') return root;
    str++;
    root->left = deser(str);
    root->right = deser(str);
    return root;
}

};

全部评论
把值给复原出来,因为是以字符串形式存的,把字符串转换为整形
点赞 回复 分享
发布于 2020-12-30 18:39
我想问依一下,就是这个反序列化里面,while循环里面的操作是干啥的?譬如乘十啥的,,,
点赞 回复 分享
发布于 2020-12-04 06:23

相关推荐

Cherrycola01:0实习 0项目 约等于啥也没有啊 哥们儿这简历认真的吗
点赞 评论 收藏
分享
曲霜晨:娱乐至上的年代
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务