前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >LeetCode 297. 二叉树的序列化与反序列化(前序遍历&层序遍历)

LeetCode 297. 二叉树的序列化与反序列化(前序遍历&层序遍历)

作者头像
Michael阿明
发布2020-07-13 15:29:13
5120
发布2020-07-13 15:29:13
举报

1. 题目

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

二叉树,字符 ,互转

《剑指Offer》同题:面试题37. 序列化二叉树

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

2. 解题

类似题解:LeetCode 331. 验证二叉树的前序序列化

2.1 前序遍历

代码语言:javascript
复制
class Codec {
public:
    // Encodes a tree to a single string.
    string serialize(TreeNode* root) 
    {
        ostringstream out;
        serialize(root,out);
        return out.str();
    }

    // Decodes your encoded data to tree.
    TreeNode* deserialize(string data) 
    {
        istringstream in(data);
        return deserialize(in);
    }
private:
    void serialize(TreeNode* root,ostringstream &out)
    {
        if(root)
        {
            out<< root->val << ' ';
            serialize(root->left,out);
            serialize(root->right,out);
        }
        else
            out << "N ";  
    }
    TreeNode* deserialize(istringstream &in)
    {
        string val;
        in >> val;
        if(val == "N"){
            return NULL;
        }
        TreeNode* root = new TreeNode(stoi(val));
        root->left = deserialize(in);
        root->right = deserialize(in);
        return root;
    }
};

2.2 层序遍历

代码语言:javascript
复制
class Codec {
public:

    // Encodes a tree to a single string.
    string serialize(TreeNode* root) {
	    if(root == NULL) 
	    	return "";
	    queue<TreeNode*> q;
	    TreeNode* node;
	    q.push(root);
	    ostringstream out;
	    while(!q.empty())
	    {
    	    node = q.front();
            q.pop();
            if(node == NULL)   
                out << "N ";
            else
            {
                out << node->val << " ";
                q.push(node->left);
                q.push(node->right);
            }
	    }  
    	return out.str();
    }

    // Decodes your encoded data to tree.
    TreeNode* deserialize(string data) {
        if(data.empty())    
        	return NULL;
	    istringstream in(data);
	    string s;
	    in >> s;
	    TreeNode* root = new TreeNode(stoi(s));	    
	    queue<TreeNode*> q;
	    TreeNode* node;
	    q.push(root);	    
	    while(!q.empty())
	    {
	        node = q.front();
	        q.pop();
	        in >> s;
	        if(s[0] == 'N')
	            node->left = NULL;
	        else
	        {
	            node->left = new TreeNode(stoi(s));
	            q.push(node->left);
	        }
	        
	        in >> s;
	        if(s[0] == 'N')
	            node->right = NULL;
	        else
	        {
	            node->right = new TreeNode(stoi(s));
	            q.push(node->right);
	        }
	        
	    } 
	    return root;
    }
};
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-10-12 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 题目
  • 2. 解题
    • 2.1 前序遍历
      • 2.2 层序遍历
      相关产品与服务
      文件存储
      文件存储(Cloud File Storage,CFS)为您提供安全可靠、可扩展的共享文件存储服务。文件存储可与腾讯云服务器、容器服务、批量计算等服务搭配使用,为多个计算节点提供容量和性能可弹性扩展的高性能共享存储。腾讯云文件存储的管理界面简单、易使用,可实现对现有应用的无缝集成;按实际用量付费,为您节约成本,简化 IT 运维工作。
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档