题解 | #序列化二叉树#
序列化二叉树
https://www.nowcoder.com/practice/cf7e25aa97c04cc1a68c8f040e71fb84
/*
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* root) {
queue<TreeNode*> treeList;
treeList.push(root);
string s = "";
function<char* (string)> StringToCharStar = [&](string mystr) {
char* mychar = new char[mystr.size() + 1];
copy(mystr.begin(), mystr.end(), mychar);
mychar[mystr.size()] = '\0';
return mychar;
};
while (!treeList.empty()) {
int n = treeList.size();
for (int i = 0; i < n; i++) {
auto p = treeList.front();
treeList.pop();
if (p) {
s += to_string(p->val) + ' ';
treeList.push(p->left);
treeList.push(p->right);
} else {
s += "# ";
}
}
}
return StringToCharStar(s);
}
TreeNode* Deserialize(char* str) {
string s = "";
queue<TreeNode*> treeVec;
while (*str != '\0') {
char cc = *str;
if (cc == '#') {
treeVec.push(NULL);
} else if (isdigit(cc)) {
s += cc;
} else if (cc == ' ') {
if (s != "") {
TreeNode* pp = new TreeNode(stoi(s));
treeVec.push(pp);
s = "";
}
}
str++;
}
if (treeVec.size() <= 0)
return NULL;
int n = treeVec.size();
TreeNode* root = treeVec.front();
treeVec.pop();
queue<TreeNode*> treeList;
treeList.push(root);
while (!treeVec.empty()) {
auto pR = treeList.front();
treeList.pop();
if (!pR)
continue;
auto leftR = treeVec.front();
treeVec.pop();
auto rightR = treeVec.front();
treeVec.pop();
pR->left = leftR;
pR->right = rightR;
treeList.push(pR->left);
treeList.push(pR->right);
}
return root;
}
};
查看21道真题和解析