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