• 序列化二叉树


    题目描述

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

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

    参考二级指针。

  • 相关阅读:
    02-MySQL的安装和管理
    01-pymysql模块的安装
    异常处理
    USACO 2015 Feb Censoring
    玄武密码(bzoj4327)(JSOI2012)
    浅谈AC自动机
    Equation
    JOI五子棋
    浅谈Tarjan
    年轮蛋糕JOI2014Final
  • 原文地址:https://www.cnblogs.com/Lune-Qiu/p/9294788.html
Copyright © 2020-2023  润新知