/* struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) { } }; */ class Solution { public: // 我们采用后续遍历做一下 // 拿{8,6,10,5,7,9,11}来说 /* NULL 用#号代表,用逗号分隔元素 所以后续遍历就是 左右中 #,#,5,#,#,7,6,#,#,9,#,#,11,10,8, */ string s; void ser(TreeNode* root, string& s) { if(root==nullptr) { s.push_back('#'); s.push_back(','); return; } ser(root->left,s); ser(root->right,s); s+=to_string(root->val); s.push_back(','); } char* Serialize(TreeNode *root) { ser(root,s); cout<<"ser: "<<s<<endl; return const_cast<char*>(s.c_str()); } TreeNode* Des(string& s,int& index) { // 先拿到当前的元素 if(index<0) { return nullptr; } if(s[index]=='#') { index--; index--; return nullptr; } int i = index; while(s[i]!=',') { i--; } string tmp = s.substr(i+1,index-i); cout<<"tmp: "<<tmp<<" "; // int num =0; int num = stoi(s.substr(i+1,index-i)); // cout<<num<<endl; index=i-1; // cout<<"index: "<< index<<endl; TreeNode * root = new TreeNode(num); root->right = Des(s, index); root->left = Des(s, index); return root; } TreeNode* Deserialize(char *str) { string s(str); int index = s.size()-2; return Des(s, index); } };