题解 | #序列化二叉树#
序列化二叉树
http://www.nowcoder.com/practice/cf7e25aa97c04cc1a68c8f040e71fb84
class Solution {
public:
char* Serialize(TreeNode root) {
char s = new char[100];
if (!root) {
s[0] = '#';
return s;
}
int check = 0; // To record subscript.
queue<TreeNode*> q;
q.push(root);
s[check++] = (char) root->val;
int sz = q.size();
while (q.size()) {
while (sz--) {
if (q.front()->left) {
q.push(q.front()->left);
s[check++] = (char) q.front()->left->val;
}
else {
s[check++] = '#';
}
if (q.front()->right) {
q.push(q.front()->right);
s[check++] = (char) q.front()->right->val;
}
else {
s[check++] = '#';
}
q.pop();
}
sz = q.size();
}
s[check++] = '*';
return s;
}
TreeNode* Deserialize(char *str) {
TreeNode* ans = nullptr;
if (str[0] == '#') return ans;
int size = 0;
int check = 0;
while (str[check++] != '*') {
size++;
}
queue<TreeNode*> q;
// Initialize
check = 0;
ans = new TreeNode((int) str[check++]);
q.push(ans);
while (check < size) {
int sz = q.size();
while (sz--) {
if(str[check] != '#') {
TreeNode* left = new TreeNode((int) str[check] > 0 ? (int) str[check] : 256 + str[check]);
q.front()->left = left;
q.push(q.front()->left);
}
check++;
if(str[check] != '#') {
TreeNode* right = new TreeNode((int) str[check] > 0 ? (int) str[check] : 256 + str[check]);
q.front()->right = right;
q.push(q.front()->right);
}
check++;
q.pop();
}
}
return ans;
}
};