/** * 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: // Encodes a tree to a single string. string serialize(TreeNode* root) { if(!root) return "#"; return to_string(root->val)+","+serialize(root->left)+","+serialize(root->right); } // Decodes your encoded data to tree. TreeNode* deserialize(string data) { int idx = 0; return dserialize(data, idx); } TreeNode* dserialize(string &data, int &idx){ if(data[idx] == '#'){ if(data.length()-idx > 1) idx += 2; return NULL; } int val = 0; while(idx < data.length() && isdigit(data[idx])){ val = val*10+data[idx]-'0'; idx++; } if(idxleft = dserialize(data, idx); node->right = dserialize(data, idx); return node; } }; // Your Codec object will be instantiated and called as such: // Codec* ser = new Codec(); // Codec* deser = new Codec(); // string tree = ser->serialize(root); // TreeNode* ans = deser->deserialize(tree); // return ans;