剑指 Offer 37. 序列化二叉树

Posted Billy Miracle

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了剑指 Offer 37. 序列化二叉树相关的知识,希望对你有一定的参考价值。

菜鸡思考:

这道题其实并没有那么的可怕,我们看,它只是让我们把树序列成字符串,再还原。我们可以选择自己喜欢的方式,下面我将给出DFS的方法,碰到null节点则序列化成#,所有节点用逗号分割。

菜鸡代码:

/**
 * 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:
    void rserialize(TreeNode* root, string& s) 
        if (root == NULL) 
            s += "#,";
         else 
            s += to_string(root->val) + ',';
            rserialize(root->left, s);
            rserialize(root->right, s);
        
    
    // Encodes a tree to a single string.
    string serialize(TreeNode* root) 
        string ans;
        rserialize(root, ans);
        return ans;
    

    TreeNode* rdeserialize(queue<string>& q)
        if (q.front() == "#") 
            q.pop();
            return NULL;
        
        TreeNode* root = new TreeNode(stoi(q.front()));
        q.pop();
        root->left = rdeserialize(q);
        root->right = rdeserialize(q);
        return root;
    

    // Decodes your encoded data to tree.
    TreeNode* deserialize(string data) 
        queue<string> myQueue;
        string s;
        for (char c : data) 
            if (c == ',') 
                myQueue.push(s);
                s.clear();
             else 
                s += c;
            
        
        if (!s.empty()) 
            myQueue.push(s);
            s.clear();
        
        return rdeserialize(myQueue);
    
;
// Your Codec object will be instantiated and called as such:
// Codec codec;
// codec.deserialize(codec.serialize(root));

以上是关于剑指 Offer 37. 序列化二叉树的主要内容,如果未能解决你的问题,请参考以下文章

剑指 Offer 37. 序列化二叉树

Java 剑指offer(37) 序列化二叉树

LeetCode 剑指 Offer 37. 序列化二叉树

剑指offer 面试37题

剑指offer树37.序列化二叉树

剑指Offer 37 - 序列化与反序列化二叉树