ICode9

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

449. 序列化和反序列化二叉搜索树

2022-04-16 10:03:41  阅读:139  来源: 互联网

标签:rootVal 449 string 二叉 nodes 序列化 root 节点


449. 序列化和反序列化二叉搜索树

序列化是将数据结构或对象转换为一系列位的过程,以便它可以存储在文件或内存缓冲区中,或通过网络连接链路传输,以便稍后在同一个或另一个计算机环境中重建。

设计一个算法来序列化和反序列化 二叉搜索树 。 对序列化/反序列化算法的工作方式没有限制。 您只需确保二叉搜索树可以序列化为字符串,并且可以将该字符串反序列化为最初的二叉搜索树。

编码的字符串应尽可能紧凑。

示例 1:

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

示例 2:

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

提示:

  • 树中节点数范围是 [0, 104]
  • 0 <= Node.val <= 104
  • 题目数据 保证 输入的树是一棵二叉搜索树。

思路:

​ 本题类似于二叉树的序列化与反序列化,对于BST来说,他的前序遍历第一个数是根节点。在序列化时,利用分隔符将所有数据都存入string中。在反序列化时,先将数据分开来存进容器里,在去在[min,max]闭区间中去构造BST,左节点都比根节点小,右节点都比根节点大

class Codec {
public:
    string a="";
    // Encodes a tree to a single string.
    string serialize(TreeNode* root) {
        //前序遍历
        if(root==NULL)return a;
        //用,分隔开每个数
        a+=to_string(root->val)+',';
        serialize(root->left);
        serialize(root->right);
        return a;
    }

    // Decodes your encoded data to tree.
    TreeNode* deserialize(string data) {
        //cout<<data;
        //反序列化
        //先将每个节点的数取出来
        vector<string>nodes;
        int n=data.size();
        string s="";
        for(int i=0;i<n;i++){  
            //每遇到, 就记入一个数据
            if(data[i]==','){
                nodes.push_back(s);
                s="";
            }else{
                s+=data[i];
                //cout<<s<<endl;
            }
        }
        return deserialize(nodes,INT_MIN,INT_MAX);
    }
    //利用nodes容器,在[min,max]中构造一个BST
    TreeNode* deserialize(vector<string>&nodes,int min,int max){
        if(nodes.empty())return NULL;
        //利用前序遍历进行反序列化
        //容器的第一个元素就是根节点
        int rootVal=stoi(nodes.front());
        if (rootVal > max || rootVal < min) {
            // 超过闭区间 [min, max],则返回空指针
            return NULL;
        }
        TreeNode* root=new TreeNode(rootVal);
        nodes.erase(nodes.begin());
        //递归 构造左右子树 BST左子树小于根节点 右子树大于根节点
        root->left=deserialize(nodes,min,rootVal);
        root->right=deserialize(nodes,rootVal,max);
        return root;
    }
};

空间复杂度和时间复杂度都太高,只超过了5%。:(

标签:rootVal,449,string,二叉,nodes,序列化,root,节点
来源: https://www.cnblogs.com/BailanZ/p/16151925.html

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

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

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

ICode9版权所有