您的位置:首页 > 职场人生

剑指offer——面试题62:序列化二叉树

2018-04-02 16:04 531 查看

剑指offer——面试题62:序列化二叉树

刚开始就不太懂序列化是几个意思。。

反序列化的代码不是很懂啊,待会儿问问别人~

/*
struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
TreeNode(int x) :
val(x), left(NULL), right(NULL) {
}
};
*/
class Solution {
public:
void Serialize(TreeNode *root, string &str)
{
if(root == NULL)
{
str += '#';//用#代表null
return;//返回上一层
}
else
{
string r = to_string(root->val);//值转字符串
str += r;//字符串拼接
str += ',';//数字后用,进行节点分隔
Serialize(root->left,str);
Serialize(root->right,str);
}
}
char* Serialize(TreeNode *root) {
if(root == NULL)
return NULL;
string str;
Serialize(root, str);
//字符串转char *
char *ret = new char[str.length()+1];
for(int i=0;i<str.length();i++)
{
ret[i] = str[i];
}
ret[str.length()] = '\0';
return ret;
}
TreeNode *deserialize(char **str)
{
if(**str == '#')//空的时候返回
{
++(*str);
return NULL;
}
int num = 0;
while(**str != '\0' && **str != ',')
{
num = num*10 + ((**str) - '0'); //求出每个节点的值
++(*str);
}
TreeNode *root = new TreeNode(num);
if(**str == '\0')
return root;
else
(*str)++;//跨过','
root->left = deserialize(str);
root->right = deserialize(str);
return root;
}
TreeNode* Deserialize(char *str) {
if(str == NULL)
return NULL;
TreeNode *res = deserialize(&str);
return res;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: