/*
struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
TreeNode(int x) :
val(x), left(NULL), right(NULL) {
}
};
*/
#include <cstring>
#include <string>
class Solution {
public:
void SerializeFunction(TreeNode* root, string & str){
if(root == nullptr){
str += '#';
return;
}
//根节点
string temp = to_string(root->val);
str += temp + '!'; //加!,区分节点
//左子树
SerializeFunction(root->left, str);
//右子树
SerializeFunction(root->right, str);
}
char* Serialize(TreeNode *root) {
//处理空树
if(root == nullptr){
return "#";
}
string res;
SerializeFunction(root, res);
//把str转成char
char* charRes = new char[res.length()+1];
strcpy(charRes, res.c_str());
charRes[res.length()] = '\0';
return charRes;
}
TreeNode* DeserializeFunction(char** str){
//到达叶节点时,构建完毕,返回继续构建父节点
//双**表示取值
if(**str == '#'){
(*str)++;
return nullptr;
}
//数字转换
int val = 0;
while (**str != '!' && **str != '\0') {
val = val * 10 + ((**str) - '0');
(*str)++;
}
TreeNode* root = new TreeNode(val);
//序列到底了 、构建完成
if(**str == '\0'){
return root;
}
else{
(*str)++;
}
root->left = DeserializeFunction(str);
root->right = DeserializeFunction(str);
return root;
}
TreeNode* Deserialize(char *str) {
//空序列对应空树
if(str == "#"){
return nullptr;
}
TreeNode* res = DeserializeFunction(&str);
return res;
}
};
二叉树的序列化(牛客)
最新推荐文章于 2024-10-27 12:59:29 发布