剑指offer60-序列化二叉树
Posted trouble-easy
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了剑指offer60-序列化二叉树相关的知识,希望对你有一定的参考价值。
题目描述
请实现两个函数,分别用来序列化和反序列化二叉树
二叉树的序列化是指:把一棵二叉树按照某种遍历方式的结果以某种格式保存为字符串,从而使得内存中建立起来的二叉树可以持久保存。序列化可以基于先序、中序、后序、层序的二叉树遍历方式来进行修改,序列化的结果是一个字符串,序列化时通过
某种符号表示空节点(#),以 ! 表示一个结点值的结束(value!)。
二叉树的反序列化是指:根据某种遍历顺序得到的序列化字符串结果str,重构二叉树。
二叉树的反序列化是指:根据某种遍历顺序得到的序列化字符串结果str,重构二叉树。
例如,我们可以把一个只有根节点为1的二叉树序列化为"1,",然后通过自己的函数来解析回这个二叉树
class Solution {
vector<int>buffer;
void dfs(TreeNode*p)
{
if(!p)buffer.push_back(35);
else{
buffer.push_back(p->val);
dfs(p->left);
dfs(p->right);
}
}
TreeNode* dfs2(int*&p)
{
if(p!=NULL&&(*p)!=35){
TreeNode*q;
q=new TreeNode(*p);
p++;
q->left=dfs2(p);
q->right=dfs2(p);
return q;
}else{
if(*p==‘#‘)p++;
return NULL;
}
}
public:
char* Serialize(TreeNode *root) {
int*res;
TreeNode*p=root;
dfs(p);
res=new int[buffer.size()];//new int ()显示段错误
for(unsigned int i=0;i<buffer.size();i++)
{
res[i]=buffer[i];//cout<<res[i]<<endl;
}
return (char*)res;
}
TreeNode* Deserialize(char *str) {
int *p;
p=(int*)str;
return dfs2(p);
}
};
vector<int>buffer;
void dfs(TreeNode*p)
{
if(!p)buffer.push_back(35);
else{
buffer.push_back(p->val);
dfs(p->left);
dfs(p->right);
}
}
TreeNode* dfs2(int*&p)
{
if(p!=NULL&&(*p)!=35){
TreeNode*q;
q=new TreeNode(*p);
p++;
q->left=dfs2(p);
q->right=dfs2(p);
return q;
}else{
if(*p==‘#‘)p++;
return NULL;
}
}
public:
char* Serialize(TreeNode *root) {
int*res;
TreeNode*p=root;
dfs(p);
res=new int[buffer.size()];//new int ()显示段错误
for(unsigned int i=0;i<buffer.size();i++)
{
res[i]=buffer[i];//cout<<res[i]<<endl;
}
return (char*)res;
}
TreeNode* Deserialize(char *str) {
int *p;
p=(int*)str;
return dfs2(p);
}
};
以上是关于剑指offer60-序列化二叉树的主要内容,如果未能解决你的问题,请参考以下文章