二叉树序列化
class Codec {public:string serialize(TreeNode* root) {if (!root) {return "X";}auto left = "(" + serialize(root->left) + ")";auto right = "(" + serialize(root->right) + ")";return left + to_string(root->val) + right;}inline TreeNode* parseSubtree(const string &data, int &ptr) {++ptr; // 跳过左括号auto subtree = parse(data, ptr);++ptr; // 跳过右括号return subtree;}inline int parseInt(const string &data, int &ptr) {int x = 0, sgn = 1;if (!isdigit(data[ptr])) {sgn = -1;++ptr;}while (isdigit(data[ptr])) {x = x * 10 + data[ptr++] - '0';}return x * sgn;}TreeNode* parse(const string &data, int &ptr) {if (data[ptr] == 'X') {++ptr;return nullptr;}auto cur = new TreeNode(0);cur->left = parseSubtree(data, ptr);cur->val = parseInt(data, ptr);cur->right = parseSubtree(data, ptr);return cur;}TreeNode* deserialize(string data) {int ptr = 0;return parse(data, ptr);}};
