ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

297. 二叉树的序列化与反序列化

2022-05-02 10:33:24  阅读:148  来源: 互联网

标签:string 示例 二叉树 297 nodes 序列化 root


297. 二叉树的序列化与反序列化

序列化是将一个数据结构或者对象转换为连续的比特位的操作,进而可以将转换后的数据存储在一个文件或者内存中,同时也可以通过网络传输到另一个计算机环境,采取相反方式重构得到原数据。

请设计一个算法来实现二叉树的序列化与反序列化。这里不限定你的序列 / 反序列化算法执行逻辑,你只需要保证一个二叉树可以被序列化为一个字符串并且将这个字符串反序列化为原始的树结构。

提示: 输入输出格式与 LeetCode 目前使用的方式一致,详情请参阅 LeetCode 序列化二叉树的格式。你并非必须采取这种方式,你也可以采用其他的方法解决这个问题。

示例 1:

img

输入:root = [1,2,3,null,null,4,5]
输出:[1,2,3,null,null,4,5]

示例 2:

输入:root = []
输出:[]

示例 3:

输入:root = [1]
输出:[1]

示例 4:

输入:root = [1,2]
输出:[1,2]

提示:

  • 树中结点数在范围 [0, 104]
  • -1000 <= Node.val <= 1000

思路在https://www.cnblogs.com/BailanZ/p/16215177.html

class Codec {
public:
    string st="";
    // Encodes a tree to a single string.
    string serialize(TreeNode* root) {
         seria(root);
         return st;
    }
    void seria(TreeNode* root){
        if(root==nullptr){
          st+='#';
          return ;
        }
        st+=to_string(root->val)+',';
        seria(root->left);
        seria(root->right);
    }
    

    vector<int> nodes;
    // Decodes your encoded data to tree.
    TreeNode* deserialize(string data) {
        string temp="";
        for(char s:data){
            if(s=='#'){
                nodes.push_back(INT_MAX);
            }
            else if(s==','){
                nodes.push_back(atoi(temp.c_str()));
                temp="";
            }else{
                temp+=s;
            }
        }
        return deseria(nodes);
    }
    TreeNode* deseria(vector<int> &nodes){
        //for(auto a:nodes){
         //   cout<<a<<endl;
        //}
        if(nodes.empty()){
            return nullptr;
        }
        if(nodes.front()==INT_MAX){
            nodes.erase(nodes.begin());
            return nullptr;
        }
        TreeNode* root=new TreeNode(nodes.front());
        nodes.erase(nodes.begin());
        root->left=deseria(nodes);
        root->right=deseria(nodes);
        return root;
    }
};

标签:string,示例,二叉树,297,nodes,序列化,root
来源: https://www.cnblogs.com/BailanZ/p/16215202.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有