二叉树的序列化和反序列化,纯纯的八股文,背住就好了
// Encodes a tree to a single string.
string serialize(TreeNode* root)
{
if(root==nullptr)
return "#_";
string res=to_string(root->val)+"_";
res+=serialize(root->left);
res+=serialize(root->right);
return res;
}
// Decodes your encoded data to tree.
TreeNode* deserialize(string data)
{
queue<string> qe;
toQueue(data, qe);
return deserialize(qe);
}
void toQueue(string data, queue<string>& qe)
{
string node;
int index=0;
while(index!=data.size())
{
if(data[index]=='_')
{
qe.push(node);
node.clear();
}
else
node+=data[index];
index++;
}
}
TreeNode* deserialize(queue<string> &qe)
{
string val=qe.front();
qe.pop();
if(val=="#") return nullptr;
TreeNode* node=new TreeNode(stoi(val));
node->left=deserialize(qe);
node->right=deserialize(qe);
return node;
}