zoukankan      html  css  js  c++  java
  • 序列二叉树和反序列 (不是自己做的)

    为什么使用二级指针 ???
    可以用一级指针,但是需要用一级指针的引用才行,一级指针的引用和二级指针一回事。比如说你有个数组指针 int *num,这个num现在指向数组第3个元素,

    你在函数调用的时候,如果在函数参数传入num的话,你在函数调用里面对num进行++操作,只会影响到这个函数里面,这个函数外面,num的指向的值还是第三个元素。

    我们想要函数调用结束后,在函数里面的num++操作会影响到函数外面,则1,可以使用指针的引用。2,使用二级指针,3使用一个全局变量统计num指向第几个元素的信息。

    一般啊。二叉树遍历都是 返回值 void ,因此有必要提出来单独去递归;;

    有时候比如char* 不好用   想用string 时候可以传进函数去,用完再调回来;

     

    num = num*10 + ((**str) - '0');这句是什么意思呢??
     
     
    barbo 回复 闪闪烁
    将逗号之前的字符串数字按十进制规则转为整数,如'23,'转23
    /*
    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) {
           if(root == NULL)
               return NULL;
            string str;
            Serialize(root, str);
            char *ret = new char[str.length() + 1];
            int i;
            for(i = 0; i < str.length(); i++){
                ret[i] = str[i];
            }
            ret[i] = '';
            return ret;
        }
        void Serialize(TreeNode *root, string& str){
            if(root == NULL){
                str += '#';
                return ;
            }
            string r = to_string(root->val);
            str += r;
            str += ',';
            Serialize(root->left, str);
            Serialize(root->right, str);
        }
         
        TreeNode* Deserialize(char *str) {
            if(str == NULL)
                return NULL;
            TreeNode *ret = Deserialize(&str);
     
            return ret;
        }
        TreeNode* Deserialize(char **str){//由于递归时,会不断的向后读取字符串
            if(**str == '#'){  //所以一定要用**str,
                ++(*str);         //以保证得到递归后指针str指向未被读取的字符
                return NULL;
            }
            int num = 0;
            while(**str != '' && **str != ','){    //可能几个数代表一个   ,前的都是一个数
                num = num*10 + ((**str) - '0');
                ++(*str);
            }
            TreeNode *root = new TreeNode(num);
            if(**str == '')
                return root;
            else
                (*str)++; //将逗号弄过去
            root->left = Deserialize(str);
            root->right = Deserialize(str);
            return root;
        }
    };
  • 相关阅读:
    第二十七天笔记
    hdoj 1024
    poj 2253
    超水的一道最短路poj2387
    打算要做的题目
    poj 3128 关于置换群的规律
    poj 1721
    poj 1026 置换的应用(小试牛刀)
    置换的一项运用 poj3270
    Codeforces Round #483 (Div. 2) D. XOR-pyramid dp的应用
  • 原文地址:https://www.cnblogs.com/cgy1012/p/11393556.html
Copyright © 2011-2022 走看看