层序遍历序列化与反序列化
/*
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) {
if(root == NULL) return NULL;
queue<TreeNode*> q;
q.push(root);
string res;
while(!q.empty()){
TreeNode* node = q.front(); q.pop();
if(node != NULL){
if(res != "") res += ",";
res += to_string(node -> val);
q.push(node -> left);
q.push(node -> right);
}else res += ",#";
}
char* resChars = new char[res.length()];
for(int i = 0; i < res.length(); i ++){
resChars[i] = res[i];
}
return resChars;
}
TreeNode* Deserialize(char *str) {
if(str == NULL) return NULL;
string s(str);
vector<string> vec = splitToArr(s);
TreeNode* root = new TreeNode(stoi(vec[0]));
queue<TreeNode*> q;
q.push(root);
int i = 1;
int n = vec.size();
while(!q.empty()){
TreeNode* node = q.front(); q.pop();
if(vec[i] != "#"){
node -> left = new TreeNode(stoi(vec[i]));
q.push(node -> left);
}
i ++;
if(vec[i] != "#"){
node -> right = new TreeNode(stoi(vec[i]));
q.push(node -> right);
}
i ++;
}
return root;
}
vector<string> splitToArr(string str){
vector<string> res;
string s;
for(char ch:str){
if(ch == ','){
res.push_back(s);
s = "";
}else s += ch;
}
res.push_back(s);
return res;
}
}; 
京公网安备 11010502036488号