实现两个函数,分别用来序列化和反序列化二叉树。
分析题目:序列化没有任何要求,但是要能根据序列化的字符串重新构造这棵树。
思路:利用了stringstream,先递归序列化左子树,再递归序列化右子树。递归并不难理解,收获最大的还是了解了stringstream的用法
string serialize(TreeNode* root) {
stringstream out;
return helper1(root,out);
}
string helper1(TreeNode* root,stringstream &out){
if(root){
out<<root->val<<' ';
helper1(root->left,out);
helper1(root->right,out);
}else{
out<<"n ";
}
return out.str();
}
// Decodes your encoded data to tree.
TreeNode* deserialize(string data) {
stringstream in(data);
return helper2(in);
}
TreeNode* helper2(stringstream &in){
string val;
in>>val;
if(val=="n")return nullptr;
TreeNode *root=new TreeNode(stoi(val));
root->left=helper2(in);
root->right=helper2(in);
return root;
}