题目描述
请实现两个函数,分别用来序列化和反序列化二叉树
思路:一开始根本没明白序列化和反序列化是什么意思,后来才明白,序列化就是把一个二叉树变成一个字节流,用‘,’分隔结点,用‘#’代替空结点,反序列化就是把这个字节流重新生成一个二叉树。用前序遍历就可以了。还有人用双向队列的,个人觉得挺巧妙的,避免了递归,把代码也贴到下面了。
代码:
/*
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;
string s;
Ser(root,s);
char *res=new char[s.length()+1];
int i;
for(i=0;i<s.length();i++)
res[i]=s[i];
res[i]='\0';
return res;
}
void Ser(TreeNode *r,string &s){
if(r==NULL){
s+='#';
return;
}
s+=to_string(r->val)+',';
Ser(r->left,s);
Ser(r->right,s);
}
TreeNode* Deserialize(char *str) {
if(str==NULL)
return NULL;
TreeNode* root =