序列二叉树和反序列 (不是自己做的)

Posted cgy1012

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了序列二叉树和反序列 (不是自己做的)相关的知识,希望对你有一定的参考价值。

为什么使用二级指针 ???
可以用一级指针,但是需要用一级指针的引用才行,一级指针的引用和二级指针一回事。比如说你有个数组指针 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] = \0;
        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 != \0 && **str != ,)    //可能几个数代表一个   ,前的都是一个数
            num = num*10 + ((**str) - 0);
            ++(*str);
        
        TreeNode *root = new TreeNode(num);
        if(**str == \0)
            return root;
        else
            (*str)++;
        root->left = Deserialize(str);
        root->right = Deserialize(str);
        return root;
    
;

 

以上是关于序列二叉树和反序列 (不是自己做的)的主要内容,如果未能解决你的问题,请参考以下文章

二叉树的序列化和反序列化

python代码实现二叉树的序列化和反序列化

二叉树的序列化和反序列化

Lintcode---二叉树的序列化和反序列化

大厂校招的一典型面试题:二叉树的序列化和反序列化

二叉树的序列化和反序列化(先序,按层序列化),包含递归图