3
string pre(TreeNode *root) {4
if (root == NULL) return "";7
string tempz = to_string(temp);9
string l = pre(root->left);10
string r = pre(root->right);12
return (tempz + "," + l + "," + r);15
vector<int> parse_string(string data) {20
for (int i = 0; i < n; ++i) {35
TreeNode *make_tree(vector<int> &preorder, int min_val, int max_val, int &preorder_idx, int n) {36
if (preorder_idx == n) return NULL;37
int val = preorder[preorder_idx];38
if (min_val <= val and val <= max_val) {39
TreeNode *curr = new TreeNode(val);41
curr->left = make_tree(preorder, min_val, val - 1, preorder_idx, n);42
curr->right = make_tree(preorder, val + 1, max_val, preorder_idx, n);48
string serialize(TreeNode *root) {49
string traversal = pre(root);50
// cout<<traversal<<endl;54
TreeNode *deserialize(string data) {55
if (data.size() == 0) return NULL;56
vector<int> traversal = parse_string(data);58
// for(auto x:traversal)62
TreeNode *root = make_tree(traversal, INT_MIN, INT_MAX, preorder_idx, traversal.size());