297. Serialize and Deserialize Binary Tree(Leetcode每日一題-2020.06.16)

Problem

Serialization is the process of converting a data structure or object into a sequence of bits so that it can be stored in a file or memory buffer, or transmitted across a network connection link to be reconstructed later in the same or another computer environment.

Design an algorithm to serialize and deserialize a binary tree. There is no restriction on how your serialization/deserialization algorithm should work. You just need to ensure that a binary tree can be serialized to a string and this string can be deserialized to the original tree structure.

Example

在這裏插入圖片描述

Solution

結合二叉樹的前序遍歷和stringstream。

/**
 * 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.
    string serialize(TreeNode* root) {
        stringstream out;
        _serialize(root,out);
        return out.str();
        
    }

    // Decodes your encoded data to tree.
    TreeNode* deserialize(string data) {
        stringstream in(data);
        return _deserialize(in);
    }

private:
    void _serialize(TreeNode *root,stringstream &out)
    {
        if(!root)
        {
            out<<"#"<<" ";//space is used to split string in _deserialize
        }
        else
        {
            out<<root->val<<" ";//space is used to split string _deserialize
            _serialize(root->left,out);
            _serialize(root->right,out);
        }
    }

    TreeNode* _deserialize(stringstream& in)
    {
        string val = "";
        in >> val;

        if(val == "#")
            return NULL;
        
        TreeNode *root = new TreeNode(stoi(val));
        root->left = _deserialize(in);
        root->right = _deserialize(in);

        return root;
    }
};

// Your Codec object will be instantiated and called as such:
// Codec codec;
// codec.deserialize(codec.serialize(root));
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章