您的位置:首页 > Web前端

[剑指offer]序列化二叉树

2016-06-04 09:14 330 查看


题目描述

请实现两个函数,分别用来序列化和反序列化二叉树

分析:基本思想是先序遍历二叉树,再从先序遍历的结果反序列化二叉树

代码:

/*
struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
TreeNode(int x) :
val(x), left(NULL), right(NULL) {
}
};
*/
class Solution {
vector<int> v;
void helperS(TreeNode* root){
if(!root) v.push_back(INT_MAX);
else{
v.push_back(root->val);
helperS(root->left);
helperS(root->right);
}

}
TreeNode* helperD(int*& num) {
if(*num==INT_MAX){
++num;
return NULL;
}
TreeNode* p=new TreeNode(*num);
++num;
p->left=helperD(num);
p->right=helperD(num);
return p;
}
public:

char* Serialize(TreeNode *root) {
v.clear();
helperS(root);
int *ret=new int[v.size()];
for(int i=0;i<v.size();i++){
ret[i]=v[i];
}
return (char*)ret;
}
TreeNode* Deserialize(char *str) {
int* p=(int*)str;
return helperD(p);
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: