【问题】请实现两个函数,分别用来序列化和反序列化二叉树
二叉树的序列化是指:把一棵二叉树按照某种遍历方式的结果以某种格式保存为字符串,从而使得内存中建立起来的二叉树可以持久保存。序列化可以基于先序、中序、后序、层序的二叉树遍历方式来进行修改,序列化的结果是一个字符串,序列化时通过 某种符号表示空节点(#),以 !表示一个结点值的结束(value!)。
二叉树的反序列化是指:根据某种遍历顺序得到的序列化字符串结果str,重构二叉树。
/* struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) { } }; */ class Solution { public: char* Serialize(TreeNode *pRoot) { string s; if (!pRoot) return nullptr; deque<TreeNode*> q; q.push_back(pRoot); while (!q.empty()) { int n = q.size(); for (int i = 0; i < n; ++i) { if (q.front()) { q.push_back(q.front()->left); q.push_back(q.front()->right); s += to_string(q.front()->val) + ' '; } else { // 如果是nullptr,则使用# 表示 s += "# "; } q.pop_front(); } } char* chr = strdup(s.c_str()); return chr; } TreeNode* Deserialize(char *str) { if (!str) return nullptr; int k = 0; auto ret = nextNode(str, k); deque<TreeNode*> q; q.push_back(ret); while (!q.empty()) { int n = q.size(); for (int i = 0; i < n; ++i) { q.front()->left = nextNode(str, k); q.front()->right = nextNode(str, k); if (q.front()->left) q.push_back(q.front()->left); if (q.front()->right) q.push_back(q.front()->right); q.pop_front(); } } return ret; } TreeNode* nextNode(char *str,int &i) { string s; while (str[i] != '