序列化二叉树
题目描述
请实现两个函数,分别用来序列化和反序列化二叉树
例如:二叉树8,6,5,7,10,9,10,11
序列化:(采用前序遍历方式)8,6,5,%%7,%%10,9,%%11,%%
反序列化:就是把之前序列化的结果再转化回去。即转化为一个树。
解析:其中代码用,分隔主要是为了防止有两位数或多位数的情况。
我的代码:
序列化1:
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; }
必须要传递二级指针,因为要改变指针的值。
参考二级指针。