297. Serialize and Deserialize Binary Tree

Posted 为了更优秀的你,加油!

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了297. Serialize and Deserialize Binary Tree相关的知识,希望对你有一定的参考价值。

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.

For example, you may serialize the following tree

    1
   /   2   3
     /     4   5

as "[1,2,3,null,null,4,5]", just the same as how LeetCode OJ serializes a binary tree. You do not necessarily need to follow this format, so please be creative and come up with different approaches yourself.

 

Note: Do not use class member/global/static variables to store states. Your serialize and deserialize algorithms should be stateless.

解题思路:将一棵树序列化和反序列化,规则自己制定。将树按先序遍历序列化之后,反序列化的时候的难点就是如何把那些数值重新拿出来。

/**
 * 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) {
        if(!root)return "#";
        return to_string(root->val)+,+serialize(root->left)+,+serialize(root->right);
    }

    // Decodes your encoded data to tree.
    TreeNode* deserialize(string data) {
        return mydeserialize(data);
    }
private:
    TreeNode* mydeserialize(string& data) {
        if(data[0] == #) {
            if(data.length() > 1) data=data.substr(2);
            return NULL;
        } else {
            TreeNode* root = new TreeNode(helper(data));
            root->left = mydeserialize(data);
            root->right = mydeserialize(data);
            return root;
        } 
    }
    int helper(string& data){
        int pos = data.find(,);
        int val = stoi(data.substr(0,pos));
        data = data.substr(pos+1);
        return val;
    }
};

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

 

以上是关于297. Serialize and Deserialize Binary Tree的主要内容,如果未能解决你的问题,请参考以下文章

297. Serialize and Deserialize Binary Tree

297. Serialize and Deserialize Binary Tree

297. Serialize and Deserialize Binary Tree

297. Serialize and Deserialize Binary Tree

297.Serialize and Deserialize Binary Tree

297. Serialize and Deserialize Binary Tree