剑指offer37--序列化二叉树

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/m0_37561165/article/details/82634469

题目描述

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

思路:

前序遍历加上“#”作为结尾

坑:

string s;
char* res=s.c_str();//报错~~~

/*必须这样*/
char* res=new char[s.size()+1];
strncpy(res,s.c_str(),s.size());

 牛客不能用itoa,得自己写

/*
struct TreeNode {
    int val;
    struct TreeNode *left;
    struct TreeNode *right;
    TreeNode(int x) :
            val(x), left(NULL), right(NULL) {
    }
};
*/
class Solution {
public:
    char* Serialize(TreeNode *root) {
        string s=SerializeCore(root);
        char* res=new char[s.size()+1];
        strncpy(res,s.c_str(),s.size());
        res[s.size()] = '\0';
        return res;
    }
      string SerializeCore(TreeNode* root)
    {
        if(root==NULL)
           return "#";
        string s=to_string(root->val)+",";
        s+=SerializeCore(root->left);
        s+=SerializeCore(root->right);
        return s;
    }
     
    TreeNode* Deserialize(char *str) {
        if(str==NULL)
            return NULL;
        return DeserializeCore(str);
    }
    TreeNode* DeserializeCore(char*& str)
    {
        int num = 0;
        if(*str=='#'){
            str++;
            return NULL;
        }
        else
        {
            while(*str != '\0' && *str != ','){
                num = num*10 + ((*str) - '0');
                str++;
            }
            TreeNode *root = new TreeNode(num);
            if(*str=='\0')
                return root;
            else
                str++;
            root->left=DeserializeCore(str);
            root->right=DeserializeCore(str);
            return root;
        }
    }
};

猜你喜欢

转载自blog.csdn.net/m0_37561165/article/details/82634469