1.题目
请实现两个函数,分别用来序列化和反序列化二叉树
2.Code
用特定的符号将各个节点独立出来,最后按照这个顺序重建二叉树即可,注意一些边界条件。
class Solution {
public:
string Tree_to_string(TreeNode* root){
if(!root){
return "#";
}
string str = to_string(root->val) + '_';
return str + Tree_to_string(root->left)
+Tree_to_string(root->right);
}
char* Serialize(TreeNode *root) {
if(!root){
return NULL;
}
string str = Tree_to_string(root);
int length = str.length();
char* res = new char[length+1];
strcpy(res,str.c_str());
return res;
}
TreeNode* Deserialize(char *str) {
if(str == NULL){
return NULL;
}
TreeNode* res = string_to_Tree(&str);
return res;
}
TreeNode* string_to_Tree(char** str){
if(**str == '#'){
(*str)++;
return NULL;
}
int num = 0;
while(**str != '_' && **str != '\0'){
num = num *10 + ((**str) - '0');
(*str)++;
}
TreeNode* root = new TreeNode(num);
if(**str == '\0')
return root;
else
(*str)++;
root->left = string_to_Tree(str);
root->right = string_to_Tree(str);
return root;
}
};