序列化二叉树

题目描述

请实现两个函数,分别用来序列化和反序列化二叉树
例如:二叉树8,6,5,7,10,9,10,11
序列化:(采用前序遍历方式)8,6,5,%%7,%%10,9,%%11,%%
反序列化:就是把之前序列化的结果再转化回去。即转化为一个树。
解析:其中代码用,分隔主要是为了防止有两位数或多位数的情况。
我的代码:
序列化1:
    char* Serialize(TreeNode *root) {
        if(root == NULL)
        {
            char* ch = new char[2];
            ch[0] = '%';
            ch[1] = '';
            return ch;
        }
        string str ;
        str += to_string(root->val);
        str += ',';
        str += Serialize(root->left);
        str += Serialize(root->right);
        char *p=  (char*)malloc(str.length()+2);
        str.copy(p, str.length(), 0);
        p[str.length()] = '';
        return p;
    }

序列化2:

char* Serialize(TreeNode *root) {
        if(root == NULL)
            return NULL;
        string str ;
        Serialize(root,str);
        char *p=  (char*)malloc(str.length()+1);
        str.copy(p,str.length(),0);
        p[str.length()] = '';
        return p;
    }
    void Serialize(TreeNode *root,string& str)
    {
        if(root == NULL)
        {
            str += "%";
            return ;
        }
        str += to_string(root->val);
        str += ',';
        Serialize(root->left,str);
        Serialize(root->right,str);
    }

反序列化:

    TreeNode* Deserialize(char *str) {
        if(str == NULL)
            return NULL;
        return Deserialize(&str);
    }
    TreeNode* Deserialize(char **str) {
        if(**str == '%')
        {
            (*str)++;
            return NULL;
        }
        int num = 0;
        while(**str != ',')
        {
            num = num*10 + ((**str) - '0');
            (*str)++;
        }
        TreeNode* pRoot = new TreeNode(num);
        (*str)++;
        pRoot->left = Deserialize(str);
        pRoot->right = Deserialize(str);
        return pRoot;
    }

 必须要传递二级指针,因为要改变指针的值。

参考二级指针。

原文地址:https://www.cnblogs.com/Lune-Qiu/p/9294788.html