• 【leetcode】【剑指offer Ⅱ】048. 序列化与反序列化二叉树


    问题描述:

    • 序列化是将一个数据结构或者对象转换为连续的比特位的操作,进而可以将转换后的数据存储在一个文件或者内存中,同时也可以通过网络传输到另一个计算机环境,采取相反方式重构得到原数据。
      • 请设计一个算法来实现二叉树的序列化与反序列化。这里不限定你的序列/反序列化算法执行逻辑,只需要保证一个二叉树可以被序列化为一个字符串并且将这个字符串反序列化为原始的树结构。

    核心思路:

    • 该题的意思是序列化将二叉树转为满二叉树的线性表形式保存,然后再实现函数将对应的数组形式转为二叉树。
      • 因为该题要求用字符串保存,所以节点间的分割用空格来表示,空节点用 # 来表示。
    • C++ 代码可以用 stringstream 类来对字符串的读取进行流的模拟。
      • 流的模拟就可以分割开字符串的空格位置。

    代码实现:

    class Codec
    {
    private:
        void dfsEncode(TreeNode* root, stringstream& ss)
        {
            if(!root) // 遇到空节点
            {
                ss << "#" << " ";
                return;
            }
            ss << root->val << " ";
            dfsEncode(root->left, ss);
            dfsEncode(root->right, ss);
        }
        TreeNode* dfsDecode(stringstream& ss)
        {
            string r; // 作为接收一个节点
            ss >> r;
            if(r.size() == 0 or r == "#") // 如果到字符串尾部,则什么都接收不到
                return nullptr;
            TreeNode* cur = new TreeNode(stoi(r));
            cur->left = dfsDecode(ss);
            cur->right = dfsDecode(ss);
            return cur;
        }
    public:
        // Encodes a tree to a single string.
        string serialize(TreeNode* root)
        {
            stringstream ss;
            dfsEncode(root, ss);
            return ss.str(); // 转为 string
        }
    
        // Decodes your encoded data to tree.
        TreeNode* deserialize(string data)
        {
            stringstream ss(data);
            return dfsDecode(ss);
        }
    };
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
  • 相关阅读:
    EN 13241工业、商业、车库门和大门—CE认证
    nginx+tomcat(二)
    回溯算法题目
    为您的SSH提提速
    苍穹外卖day1--开发环境搭建
    matlab 求数字积分
    如何将 Docsify 项目部署到 CentOS 系统的 Nginx 中?
    如何从小白成长为AI工程师笔记
    unity的乐高世界
    Android学习笔记 55. 重新认识Android studio开发工具之项目目录结构
  • 原文地址:https://blog.csdn.net/weixin_44705592/article/details/126556492