/*
struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
TreeNode(int x) :
val(x), left(NULL), right(NULL) {
}
};
*/
class Solution {
public:
void SerializeFuction(TreeNode* root,string& str){
if(root==nullptr){
str+="#";
return;
}
str+=to_string(root->val);
str+=' ';
SerializeFuction(root->left,str);
SerializeFuction(root->right,str);
}
char* Serialize(TreeNode *root) {
string s="";
SerializeFuction(root, s);
char* ptr=new char[s.size()+1];
for(int i=0;i<s.size();i++)
ptr[i]=s[i];
ptr[s.size()]='\0';
return ptr;
}
TreeNode* DeserializeFuction(char** str){
if(**str=='#'){
(*str)++;
return nullptr;
}
int num=0;
while(**str!=' '&&**str!='\0'){
num=num*10+((**str)-'0');
(*str)++;
}
TreeNode* root=new TreeNode(num);
if(**str=='\0')
return root;
else
(*str)++;
root->left=DeserializeFuction(str);
root->right=DeserializeFuction(str);
return root;
}
TreeNode* Deserialize(char *str) {
TreeNode* p=DeserializeFuction(&str);
return p;
}
};