反序列化思路有点混乱,总之大致思路是层序遍历
class Solution {
public:
char* Serialize(TreeNode *root) {
string tmp;
if (!root) {
tmp = "#,";
char* res;
res = (char*)malloc(tmp.length());
memcpy(res, tmp.c_str(), tmp.length());
return res;
}
queue<TreeNode*> q;
q.push(root);
while (!q.empty()) {
auto now = q.front();
q.pop();
if (now) {
tmp += to_string(now->val) + ',';
q.push(now->left);
q.push(now->right);
}
else {
tmp += "#,";
}
}
char* res;
res = (char*)malloc(tmp.length());
memcpy(res, tmp.c_str(), tmp.length());
return res;
}
TreeNode* Deserialize(char *str) {
string tmp(str);
stringstream ss(tmp);
string item;
queue<TreeNode*> q;
TreeNode* now = nullptr, *root = nullptr;
while (getline(ss, item, ',')) {
if (item != "") {
TreeNode* tn = nullptr;
if (item != "#") {
tn = new TreeNode(stoi(item));
}
if (!root) {
if (!tn) return nullptr;
root = tn;
q.push(tn);
}
else if (!now) {
now = q.front();
q.pop();
now->left = tn;
if (tn) q.push(tn);
}
else {
now->right = tn;
now = nullptr;
if (tn) q.push(tn);
}
}
}
return root;
}
};

京公网安备 11010502036488号