char* Serialize(TreeNode *root) { if(root == NULL) { char* ch = new char[2]; ch[0] = ‘%‘; ch[1] = ‘\0‘; return ch; } string str ; str += to_string(root->val); str += ‘,‘; str += Serialize(root->left); str += Serialize(root->right); char *p= (char*)malloc(str.length()+2); str.copy(p, str.length(), 0); p[str.length()] = ‘\0‘; return p; }
序列化2:
char* Serialize(TreeNode *root) { if(root == NULL) return NULL; string str ; Serialize(root,str); char *p= (char*)malloc(str.length()+1); str.copy(p,str.length(),0); p[str.length()] = ‘\0‘; return p; } void Serialize(TreeNode *root,string& str) { if(root == NULL) { str += "%"; return ; } str += to_string(root->val); str += ‘,‘; Serialize(root->left,str); Serialize(root->right,str); }
反序列化:
TreeNode* Deserialize(char *str) { if(str == NULL) return NULL; return Deserialize(&str); } TreeNode* Deserialize(char **str) { if(**str == ‘%‘) { (*str)++; return NULL; } int num = 0; while(**str != ‘,‘) { num = num*10 + ((**str) - ‘0‘); (*str)++; } TreeNode* pRoot = new TreeNode(num); (*str)++; pRoot->left = Deserialize(str); pRoot->right = Deserialize(str); return pRoot; }
原文:https://www.cnblogs.com/Lune-Qiu/p/9294788.html