/*
struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
TreeNode(int x) :
val(x), left(NULL), right(NULL) {
}
};
*/
class Solution {
public:
string s;
// 用前序遍历
void ser(TreeNode* root, string& s) {
if(root==nullptr) {
s+='#';
s+=',';
return;
}
s+=to_string(root->val);
s+=',';
ser(root->left,s);
ser(root->right,s);
}
char* Serialize(TreeNode *root) {
ser(root,s);
return const_cast<char*>(s.c_str());
}
TreeNode* Deserialize(char *str) {
string data(str);
// cout<<"s: "<<data<<endl;
int index = 0;
return des(data,index);
}
TreeNode* des(string& s, int& index) {
if(index==s.size() || index>s.size()) {
return nullptr;
}
if(s[index]=='#') {
index++;
index++;
return nullptr;
}
int sum = 0;
while(s[index]!=',') {
sum=sum*10+s[index]-'0';
index++;
}
index++;
TreeNode* root = new TreeNode(sum);
root->left=des(s,index);
root->right=des(s,index);
return root;
}
};