首页 > 其他 > 详细

序列化二叉树

时间:2018-07-11 15:43:55      阅读:191      评论:0      收藏:0      [点我收藏+]

题目描述

请实现两个函数,分别用来序列化和反序列化二叉树
例如:二叉树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] = \0;
            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()] = \0;
        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()] = \0;
        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

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!