码迷,mamicode.com
首页 > 其他好文 > 详细

剑指offer60-序列化二叉树

时间:2020-05-29 18:04:49      阅读:75      评论:0      收藏:0      [点我收藏+]

标签:offer   public   char   结束   div   node   重构   二叉树   new   

题目描述

请实现两个函数,分别用来序列化和反序列化二叉树

二叉树的序列化是指:把一棵二叉树按照某种遍历方式的结果以某种格式保存为字符串,从而使得内存中建立起来的二叉树可以持久保存。序列化可以基于先序、中序、后序、层序的二叉树遍历方式来进行修改,序列化的结果是一个字符串,序列化时通过 某种符号表示空节点(#),以 ! 表示一个结点值的结束(value!)。

二叉树的反序列化是指:根据某种遍历顺序得到的序列化字符串结果str,重构二叉树。

例如,我们可以把一个只有根节点为1的二叉树序列化为"1,",然后通过自己的函数来解析回这个二叉树
class Solution {
 
     vector<int>buffer;
     void dfs(TreeNode*p)
    {
        if(!p)buffer.push_back(35);
        else{
            buffer.push_back(p->val);
            dfs(p->left);
            dfs(p->right);
        }

    }
    TreeNode* dfs2(int*&p)
    {
        if(p!=NULL&&(*p)!=35){
            TreeNode*q;
            q=new TreeNode(*p);
            p++;
            q->left=dfs2(p);
            q->right=dfs2(p);
            return q;
        }else{
            
           if(*p==‘#‘)p++;
            return NULL;
        }

    }
      public:
    char* Serialize(TreeNode *root) {
      int*res;
        TreeNode*p=root;
        dfs(p);
        res=new int[buffer.size()];//new int ()显示段错误
        for(unsigned int i=0;i<buffer.size();i++)
        {
            res[i]=buffer[i];//cout<<res[i]<<endl;
        }
        return (char*)res;
      
    }
    TreeNode* Deserialize(char *str) {
        int *p;
        p=(int*)str;
        return dfs2(p);
    }
};

剑指offer60-序列化二叉树

标签:offer   public   char   结束   div   node   重构   二叉树   new   

原文地址:https://www.cnblogs.com/trouble-easy/p/12988559.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!