• Leetcode 297. 二叉树的序列化和反序列化(困难)


    题目:

    序列化是将一个数据结构或者对象转换为连续的比特位的操作,进而可以将转换后的数据存储在一个文件或者内存中,同时也可以通过网络传输到另一个计算机环境,采取相反方式重构得到原数据。
    *
    * 请设计一个算法来实现二叉树的序列化与反序列化。这里不限定你的序列 /
    * 反序列化算法执行逻辑,你只需要保证一个二叉树可以被序列化为一个字符串并且将这个字符串反序列化为原始的树结构。
    *
    * 提示: 输入输出格式与 LeetCode 目前使用的方式一致,详情请参阅 LeetCode
    * 序列化二叉树的格式。你并非必须采取这种方式,你也可以采用其他的方法解决这个问题。
     
    示例 1:
    * 输入: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]
     
    思路:
    c++中,stringstream可以用来自动转换或分隔字符串,其中默认分隔符包括空格、tab、回车换行
    这里我们用空格来表示结点分隔,用#表示空结点,使用前序遍历来序列化和反序列化。
    这样就可以顺序对字符串进行拆解和还原
     
    class Codec {
    public:
    
        // Encodes a tree to a single string.
        string serialize(TreeNode* root) {
            ostringstream in;
            serialize(root, in);
            return in.str();
        }
    
        void serialize(TreeNode* root, ostringstream &in){
            if(root==nullptr){
                in << "#"<<" ";
                return;
            }
            in << root->val <<" ";
            serialize(root->left,in); 
            serialize(root->right,in); 
        }
    
        // Decodes your encoded data to tree.
        TreeNode* deserialize(string data) {
            istringstream out(data);
            return deserialize(out);
        }
    
        TreeNode* deserialize(istringstream& out){
            string str;
            out >> str;
            if(str=="#"){
                return nullptr;
            }
            TreeNode* root=new TreeNode(stoi(str));
            root->left=deserialize(out);
            root->right=deserialize(out);
            return root;
        }
    };
  • 相关阅读:
    Message高级特性 & 内嵌Jetty实现文件服务器
    springboot中使用kindeditor富文本编辑器实现博客功能&vue-elementui使用vue-kindeditor
    Embarcadero RAD Studio XE5
    经典营销故事
    百度竞价教程 借助百度热力图让你的效果翻10倍
    无本借力:他是如何实现年收入70万?
    不用软件快速拥有几百个QQ群并都是管理员
    质保、保修、包修:含义不同
    域名反向解析在自建邮件群发服务器中的应用
    2014年1月1日,马年
  • 原文地址:https://www.cnblogs.com/zl1991/p/15891819.html
Copyright © 2020-2023  润新知