栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

二叉树的序列化与反序列化(leetcode格式)

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

二叉树的序列化与反序列化(leetcode格式)

在二叉树中,序列化是将二叉树转化为字符串,方便数据的存储和传输;

而反序列化是将字符串重构得到原来的二叉树,如图所示:

二叉树节点定义
// Definition for a binary tree node.
struct TreeNode {
    int val;
    TreeNode *left;
    TreeNode *right;
    TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
};
序列化代码
// Encodes a tree to a single string.
string serialize(TreeNode* root) {
    if(root==nullptr){
        return "[]";
    }

    stringstream ss;
    ss << "[";
    queue qee;
    qee.push(root);
    while(!qee.empty()){
        TreeNode* node = qee.front();
        qee.pop();
        if(node==nullptr){
            ss << "null,";
        }else{
            ss << node->val << ",";
            qee.push(node->left);
            qee.push(node->right);
        }
    }
    string res = ss.str();
    res[res.size()-1] = ']';
    return res;
}
反序列化代码
// Decodes a encoded data to tree.
TreeNode* deserialize(string data) {
    if(data.size()<=2){
        return nullptr;
    }
    stringstream ss(data.substr(1,data.size()-2));
    string item;
    getline(ss, item, ',');
    TreeNode* root = new TreeNode(stoi(item));
    queue qee;
    qee.push(root);
    while(!qee.empty()){
        TreeNode* node = qee.front();
        qee.pop();
        if(!getline(ss, item, ',')){
            break;
        }
        if(item!="null"){
            node->left = new TreeNode(stoi(item));
            qee.push(node->left);
        }
        if(!getline(ss, item, ',')){
            break;
        }
        if(item!="null"){
            node->right = new TreeNode(stoi(item));
            qee.push(node->right);
        }
    }
    return root;
}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/931999.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号