• string流


    istringstream和ostringstream

      从istringstream类中读取数据赋值给某个string,写入某个string到ostringstream类,头文件<sstream>

    实例:leetcode297

    297. Serialize and Deserialize Binary Tree 序列化和反序列化二叉树
    Serialization is the process of converting a data structure or object into a sequence of bits so that it can be stored in a file
    or memory buffer, or transmitted across a network connection link to be reconstructed later in the same or another computer
    environment.
    Design an algorithm to serialize and deserialize a binary tree.There is no restriction on how your serialization / deserialization
    algorithm should work.You just need to ensure that a binary tree can be serialized to a string and this string can be
    deserialized to the original tree structure.
    Example:
    You may serialize the following tree :
       1
      /  
     2   3
    /
    4 5
    as "[1,2,3,null,null,4,5]"
    Clarification: The above format is the same as how LeetCode serializes a binary tree.You do not necessarily need to follow
    this format, so please be creative and come up with different approaches yourself.
    Note : Do not use class member / global / static variables to store states.Your serialize and deserialize algorithms should be
    stateless.
    将一个二叉树的值转化为一个string输出,同时又能把这种string转化二叉树;
    前序、中序、后序、层序遍历均可;

    法一:
    非递归层序遍历以及由层序遍历来构造二叉树;
    主要要使用string流,不用string流的话,对于像"[11,-2,3,null,null,42,5]"这样val值大于9或者val值为负数的,你不好处理;

    /**
    * Definition for a binary tree node.
    * struct TreeNode {
    * int val;
    * TreeNode *left;
    * TreeNode *right;
    * TreeNode(int x) : val(x), left(NULL), right(NULL) {}
    * };
    */
    class Codec {
    public:
        // Encodes a tree to a single string.
        string serialize(TreeNode* root)
        {
            if (root == NULL)
                return "#";
            ostringstream out;
            queue<TreeNode*> que;
            que.push(root);
            while (!que.empty())
            {
                TreeNode* cur = que.front();
                que.pop();
                if (cur)
                {
                    out << to_string(cur->val) << " ";//向ostringstream类out中写入,记住要写空格字符串“ ”
                    que.push(cur->left);
                    que.push(cur->right);
                }
                else
                    out << "# ";//记住要写空格字符串“ ”
            }
            return out.str();
        }
    
        // Decodes your encoded data to tree.
        TreeNode* deserialize(string data)
        {
            if (data == "#")
                return NULL;
            istringstream in(data);
            queue<TreeNode*> que;
            string valString;
            in >> valString;//从istringstream类in中读取一个string赋值给valString,istringstream类默认以空格为分隔符
            TreeNode* root = new TreeNode(stoi(valString));
            que.push(root);
            while (!que.empty())
            {
                TreeNode* cur = que.front();
                que.pop();
                in >> valString;
                if (valString == "")
                    break;
                if (valString != "#")
                {
                    cur->left = new TreeNode(stoi(valString));
                    que.push(cur->left);
                }
                in >> valString;
                if (valString == "")
                    break;
                if (valString != "#")
                {
                    cur->right = new TreeNode(atoi(valString.c_str()));
                    que.push(cur->right);
                }
            }
            return root;
        }
    };
    
    // Your Codec object will be instantiated and called as such:
    // Codec codec;
    // codec.deserialize(codec.serialize(root));
  • 相关阅读:
    ASIHTTPRequest详解
    Aviary 滤镜 教程 照片编辑器
    IOS设计模式之四(备忘录模式,命令模式)
    IOS设计模式之三(适配器模式,观察者模式)
    IOS设计模式之二(门面模式,装饰器模式)
    MysqlNDB集群配置与管理
    MySqlNDB使用自带的ndb_setup.py安装集群
    Servlet引擎tomcat之安装
    分布式之Zookeeper使用
    分布式之ZookeeperMac安装
  • 原文地址:https://www.cnblogs.com/Joezzz/p/9987336.html
Copyright © 2020-2023  润新知