题解 | #序列化二叉树#
序列化二叉树
https://www.nowcoder.com/practice/cf7e25aa97c04cc1a68c8f040e71fb84
怎么还有这种题啊,我以为只有想不出来思路和秒过两种题,没想到还有这种堆程序的题。。。
看了题解,什么时候我也能写出来这种递归啊,简直美如画😍
class Solution { public: char* Serialize(TreeNode* root) { if (!root) return nullptr; vector<TreeNode*> query; vector<string> rec; query.push_back(root); TreeNode* tmp; while (!query.empty()) { tmp = query[0]; if (!tmp) rec.push_back("#"); else rec.push_back(to_string(tmp->val)); query.erase(query.begin()); if (tmp) query.push_back(tmp->left); if (tmp) query.push_back(tmp->right); } while (rec.back() == "#") { rec.pop_back(); } string ser = ""; for (int i = 0; i < rec.size(); i++) { ser += rec[i]; ser += ","; } char* chser = new char[ser.size()]; strcpy(chser, ser.c_str()); return chser; } TreeNode* Deserialize(char* str) { if (!str) return nullptr; string ser = str, s; int pre = 0, tail = 0, num; vector<TreeNode*> query; TreeNode* tmp, * root, * newtree; int judge_pop = -1; while (tail < ser.size()) { if (ser[tail] == ',') { s = ser.substr(pre, tail - pre); if (s == "#") judge_pop++; else { sscanf(s.c_str(), "%d", &num); if (query.empty()) { root = new TreeNode(num); newtree = root; query.push_back(newtree); judge_pop++; } else { tmp = query[0]; newtree = new TreeNode(num); query.push_back(newtree); if (judge_pop == 0) tmp->left = newtree; else if (judge_pop == 1) tmp->right = newtree; judge_pop++; } } tail++; pre = tail; if (judge_pop == 2) { query.erase(query.begin()); judge_pop = 0; } } else tail++; } return root; } };