题解 | #序列化二叉树#
序列化二叉树
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;
}
};


