天天看點

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 {    
    int getValue(string& str){
        int pos = str.find(',');
        int val = stoi(str.substr(0, pos));
        str = str.substr(pos + 1);
        return val;
    }
    
    TreeNode* makeNode(string& str){
        if (str[0] == '#'){
            if (str.size() > 1)
                str = str.substr(2);
            return nullptr;
        }
        
        TreeNode* node = new TreeNode(getValue(str));
        node->left = makeNode(str);
        node->right = makeNode(str);
        return node;
    }
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 makeNode(data);
    }
};