Serialize and Deserialize Binary Tree Posted on 2018-10-10 Descriptionhttps://leetcode.com/problems/serialize-and-deserialize-binary-tree/description/ Solution1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465/** * 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) { string ret; serializeHelper(root, ret); cout << ret << endl; return ret; } void serializeHelper(TreeNode* root, string& ret) { if (root == NULL) {ret += '#'; return;} ret += to_string(root->val); ret += ','; serializeHelper(root->left, ret); serializeHelper(root->right, ret); return; } // Decodes your encoded data to tree. TreeNode* deserialize(string data) { int index = 0; TreeNode* ret = deserializeHelper(data, index); return ret; } TreeNode* deserializeHelper(string& data, int& index) { if (index == data.size() || data[index] == '#') { ++index; return NULL; } int number = extractNumber(data, index); TreeNode* ret = new TreeNode(number); index += 1; //Skip the ',' ret->left = deserializeHelper(data, index); ret->right = deserializeHelper(data, index); cout << number << " "; cout << index << endl; return ret; } int extractNumber(string& data, int& index) { int ret = 0; int sign = 1; if (data[index] == '-') {sign = -1; ++index; } while ('0'<=data[index] && '9'>=data[index]) {ret = ret * 10 + data[index] - '0'; ++index;} return ret * sign; }};// Your Codec object will be instantiated and called as such:// Codec codec;// codec.deserialize(codec.serialize(root));