/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Codec {
public:
int index;
// Encodes a tree to a single string.
string serialize(TreeNode* root) {
string res = "";
dfs_encode(root, res);
return res;
}
void dfs_encode(TreeNode* root, string& str){
if(root==NULL){
str += "None,";
}else{
str += to_string(root->val) + ',';
dfs_encode(root->left,str);
dfs_encode(root->right,str);
}
}
// Decodes your encoded data to tree.
TreeNode* deserialize(string data) {
vector<string> datalist;
string str;
for(char c:data){
if(c != ','){
str +=c;
}else{
datalist.push_back(str);
str = "";
}
}
if(!str.empty()){
datalist.push_back(str);
str = "";
}
index = 0;
return dfs_decode(datalist);
}
TreeNode* dfs_decode(vector<string>& datalist){
if(datalist[index]=="None"){
index++;
return NULL;
}
TreeNode* node = new TreeNode(stoi(datalist[index++]));
node->left = dfs_decode(datalist);
node->right = dfs_decode(datalist);
return node;
}
};
// Your Codec object will be instantiated and called as such:
// Codec ser, deser;
// TreeNode* ans = deser.deserialize(ser.serialize(root));