/*
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);
}
};