序列化和反序列化二叉树

来源:互联网 发布:微信视频强制分享源码 编辑:程序博客网 时间:2024/05/29 14:11

本题源自剑指offer

---------------------------------------------------

char* Serialize(TreeNode *root) {       if(root == NULL)           return NULL;        string str;        Serialize(root, str);        char *ret = new char[str.length() + 1];        int i;        for(i = 0; i < str.length(); i++){            ret[i] = str[i];        }        ret[i] = '\0';        return ret;    }    void Serialize(TreeNode *root, string& str){        if(root == NULL){            str += '#';            return ;        }        string r = to_string(root->val);        str += r;        str += ',';        Serialize(root->left, str);        Serialize(root->right, str);    }         TreeNode* Deserialize(char *str) {        if(str == NULL)            return NULL;        TreeNode *ret = Deserialize(&str);         return ret;    }    TreeNode* Deserialize(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;        else            (*str)++;        root->left = Deserialize(str);        root->right = Deserialize(str);        return root;    }


原创粉丝点击