/* struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) { } }; */ class Solution { public: string bestr(TreeNode *root){ if(root==nullptr){ return "#,"; } string str=","; if(root->val==0){ str="0,"; } int t=root->val; while(t!=0){ string str0=" "; str0[0]=t%10+48; str=str0+str; t/=10; } str+=bestr(root->left); str+=bestr(root->right); return str; } TreeNode* betree(string &str){ if(str.size()==0){ return nullptr; } if(str[0]=='#'){ str.erase(0,2); return nullptr; } int va=0; while(str[0]!=','){ va*=10; va+=(str[0]-48); str.erase(0,1); } str.erase(0,1); TreeNode *ans=new TreeNode(va); ans->left=betree(str); ans->right=betree(str); return ans; } char* Serialize(TreeNode *root) { string str; str=bestr(root); char *ch=new char[str.size()+1]; strcpy(ch,str.c_str()); ch[str.size()]='\0'; return ch; } TreeNode* Deserialize(char *str) { string str0; for(int i=0;*(str+i)!='\0';i++){ str0+=*(str+i); } return betree(str0); } };