劍指offer37--序列化二叉樹
阿新 • • 發佈:2018-12-31
題目描述
請實現兩個函式,分別用來序列化和反序列化二叉樹
思路:
前序遍歷加上“#”作為結尾
坑:
string s;
char* res=s.c_str();//報錯~~~
/*必須這樣*/
char* res=new char[s.size()+1];
strncpy(res,s.c_str(),s.size());
牛客不能用itoa,得自己寫
/* struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) { } }; */ class Solution { public: char* Serialize(TreeNode *root) { string s=SerializeCore(root); char* res=new char[s.size()+1]; strncpy(res,s.c_str(),s.size()); res[s.size()] = '\0'; return res; } string SerializeCore(TreeNode* root) { if(root==NULL) return "#"; string s=to_string(root->val)+","; s+=SerializeCore(root->left); s+=SerializeCore(root->right); return s; } TreeNode* Deserialize(char *str) { if(str==NULL) return NULL; return DeserializeCore(str); } TreeNode* DeserializeCore(char*& str) { int num = 0; if(*str=='#'){ str++; return NULL; } else { while(*str != '\0' && *str != ','){ num = num*10 + ((*str) - '0'); str++; } TreeNode *root = new TreeNode(num); if(*str=='\0') return root; else str++; root->left=DeserializeCore(str); root->right=DeserializeCore(str); return root; } } };