题目描述
请实现两个函数,分别用来序列化和反序列化二叉树。这里没有规定序列化的方式。
代码
/*
struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
TreeNode(int x) :
val(x), left(NULL), right(NULL) {
}
};
*/
class Solution {
typedef TreeNode node;
typedef TreeNode* pNode;
typedef int* pInt;
vector<int> buf;
void dfs(pNode p){
if (!p) {
buf.push_back(0x23333);
}else{
buf.push_back(p->val);
dfs(p->left);
dfs(p->right);
}
}
pNode dfs(pInt &p){
if (*p == 0x23333) {
++p;
return NULL;
}
pNode res = new node(*p);
++p;
res ->left = dfs(p);
res ->right = dfs(p);
return res;
}
public:
char* Serialize(TreeNode *root) {
buf.clear();
dfs(root);
int *res = new int[buf.size()];
for (unsigned int i=0; i < buf.size(); ++i) {
res[i] = buf[i];
}
return (char*)res;
}
TreeNode* Deserialize(char *str) {
int *p =(int*)str;
return dfs(p);
}
};