zoukankan      html  css  js  c++  java
  • 序列化二叉树

    题目描述

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

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

    参考二级指针。

  • 相关阅读:
    (转)很简短,但读完你会感触良多!
    (转)让 win8 快速通过认证的5个提示
    WPF 资源路径解析
    47、SimpleOrientationSensor
    45、SplashScreen
    让IE6也支持position:fixed
    utf8编码引起js输出中文乱码的解决办法(实用)
    javascript的currying函数
    sicily 1036. Crypto Columns
    sicily 6774. Buying Mortadella
  • 原文地址:https://www.cnblogs.com/Lune-Qiu/p/9294788.html
Copyright © 2011-2022 走看看