树的序列化和反序列化
这里使用的是Leetcode上的层序遍历的序列化的方法。
string serialize(TreeNode* root)
{
string seq;
queue<TreeNode*> Q;
Q.push(root);
while(!Q.empty())
{
TreeNode* cur=Q.front();
Q.pop();
if(cur==NULL)
seq.push_back('#');
else
{
seq.push_back(cur->val);
Q.push(cur->left);
Q.push(cur->right);
}
}
return seq;
}
TreeNode* getNode(string& seq,int p)
{
if(seq[p]=='#')
return NULL;
else
{
return new TreeNode(seq[p]);
}
}
TreeNode* deserialize(string& seq)
{
if(seq.empty()||seq[0]=='#')
return NULL;
int p=0;
TreeNode* root=new TreeNode(seq[p++]);
queue<TreeNode*> Q;
Q.push(root);
while(!Q.empty())
{
TreeNode* cur=Q.front();
Q.pop();
cur->left=getNode(seq,p++);
cur->right=getNode(seq,p++);
if(cur->left)
Q.push(cur->left);
if(cur->right)
Q.push(cur->right);
}
return root;
}