Leetcode192: Serialize and Deserialize Binary Tree

来源:互联网 发布:网络人 编辑:程序博客网 时间:2024/05/17 20:29

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) {        string result;        traverse(root, result);        return result;    }    // Decodes your encoded data to tree.    TreeNode* deserialize(string data) {        int start = 0;        return helper(data, start);    }    private:    void traverse(TreeNode* root, string& result) {        if(result.size() != 0) {            result.push_back(',');        }        if(root == NULL) {            result += "NULL";            return;        }        result += to_string(root -> val);        traverse(root -> left, result);        traverse(root -> right, result);    }    TreeNode* helper(string data, int& start) {        if(start >= data.size()) {            return NULL;        }        int index = data.find_first_of(',', start);        if(index == string::npos) {            index = data.size();        }        string tmp = data.substr(start, index - start);        start = index + 1;        if(tmp == "NULL") {            return NULL;        }        TreeNode* root = new TreeNode(stoi(tmp));        root -> left = helper(data, start);        root -> right = helper(data, start);        return root;    }};// Your Codec object will be instantiated and called as such:// Codec codec;// codec.deserialize(codec.serialize(root));


0 0
原创粉丝点击