序列化之二叉树

一、背景介绍

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

你可以将以下二叉树:

     1
    /  \
   2   3
 / \
4   5

序列化为 “[1,2,3,null,null,4,5]”

二、思路简述

树的表示方法有四种,分别为前序、中序、后序、层序,本文背景中选用的是层序。不管是何种顺序,总体原理都是一样的,只是具体的实现细节稍有不同。

本文选用的层次遍历,采用队列实现,因为其先进先出的特性,可以实现对如下一颗简单二叉树的顺序访问——1,2,3。将其按顺序放入队列中,就可。


      1
    /   \
   2     3

第一步序列化起始就是层次遍历,按照层序依次将树的结点转换成字符串即可。

第二步反序列化,即将字符串中的数组按序取出,并仍按照层序还原二叉树,虽然是反序列,但仍可以将其理解成对一颗空二叉树框“模”的遍历。所以归根结底仍然是遍历,只需在遍历到的位置填上值。当然这是抽象的思维,具体的思维仍是需要根据序列化后的字符串来动态生成二叉树,生成的方法就是依靠队列,通过不停的访问字符串的结点信息,判断是否为空,来动态生成结点。

三、代码示例

#include <string>
#include <stack>
#include <queue>

using namespace std;
#define NULL nullptr

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)
    {
   
        string result;
        queue<TreeNode*> queueTree;
        queueTree.push(root);

        while (queueTree.size() != 0)
        {
   
            TreeNode* temp = queueTree.front();
            queueTree.pop();
            if (temp != NULL)
            {
   
                if (temp->left != NULL)
          
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值