ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

剑指 Offer 37. 序列化二叉树

2022-07-14 17:36:39  阅读:131  来源: 互联网

标签:TreeNode string int 37 二叉树 str 序列化 root


请实现两个函数,分别用来序列化和反序列化二叉树。

你需要设计一个算法来实现二叉树的序列化与反序列化。这里不限定你的序列 / 反序列化算法执行逻辑,你只需要保证一个二叉树可以被序列化为一个字符串并且将这个字符串反序列化为原始的树结构。

提示:输入输出格式与 LeetCode 目前使用的方式一致,详情请参阅 LeetCode 序列化二叉树的格式。你并非必须采取这种方式,你也可以采用其他的方法解决这个问题。

 

示例:

 

 


输入:root = [1,2,3,null,null,4,5]
输出:[1,2,3,null,null,4,5]


很简单的一道题,

注意题意是自己编码成什么样,然后再从什么样翻译回去

dfs即可

注意空间开大点,数字可能是负数

/**
 * 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.
    void dfs(TreeNode* root, string& str)
    {
        if(root == nullptr)
        {
            str += "null,";
            return;
        }
        str += to_string(root->val);
        str += ",";
        dfs(root->left, str);
        dfs(root->right, str);
    }

    int Num(string str)
    {
        int flag = 0;
        if(str[0] == '-') flag = 1; 
        int num = 0;
        for(int i = flag == 1 ? 1 : 0; i < str.length(); i++)
        {
            num *= 10;
            num += str[i] - '0';
        }
        return flag == 1 ? -num : num;
    }
    int k, n;
    string str[100010];

    void dfs2(TreeNode*& root)
    {
        if(k > n) return;
        if(str[k] == "null")
        {
            k++;
            root = nullptr;
            return;
        }
        root = new TreeNode(Num(str[k++]));
        dfs2(root->left);
        dfs2(root->right);
    }



    string serialize(TreeNode* root) {
        string str = "";
        dfs(root, str);
        return str;
    }

    // Decodes your encoded data to tree.
    TreeNode* deserialize(string data) {
        TreeNode* root = nullptr;
        int i = 0;
        n = 0;
        while(i < data.length())
        {
            string temp = "";
            while(data[i] != ',')
                temp += data[i++];
            str[n++] = temp;
            i++;
        }
        // // if(str[0] == "null") return root;
        // root = new TreeNode(Num(str[0]));
        k = 0;
        dfs2(root);
        
        return root;
        
    }
};

// Your Codec object will be instantiated and called as such:
// Codec codec;
// codec.deserialize(codec.serialize(root));

 

标签:TreeNode,string,int,37,二叉树,str,序列化,root
来源: https://www.cnblogs.com/WTSRUVF/p/16478555.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有