leetcode 449. Serialize and Deserialize BST 二叉搜索树BST的序列化和反序列化

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 search tree. There is no restriction on how your serialization/deserialization algorithm should work. You just need to ensure that a binary search tree can be serialized to a string and this string can be deserialized to the original tree structure.

The encoded string should be as compact as possible.

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

题意很简单,就是考察二叉搜索树BST的序列化和反序列化

建议和leetcode 331. Verify Preorder Serialization of a Binary Tree 二叉树的前序序列验证 和 leetcode 654. Maximum Binary Tree 构造最大二叉树 一起学习

建议和leetcode 105. Construct Binary Tree from Preorder and Inorder Traversal 中前序构造BST 和 leetcode 106. Construct Binary Tree from Inorder and Postorder Traversal 中后序构造BST 和leetcode 297. Serialize and Deserialize Binary Tree 二叉树的序列化和反序列化 + 深度优先遍历DFS一起学习,疑问做法感觉类似

代码如下:

#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 

using namespace std;


/*
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 ss;
        serialize(root, ss);
        return ss.str();
    }

    void serialize(TreeNode* root, stringstream& ss)
    {
        if (root==NULL)
            ss << "# ";
        else
        {
            ss << root->val << " ";
            serialize(root->left, ss);
            serialize(root->right, ss);
        }
    }

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

    TreeNode* deserialize(stringstream& ss)
    {
        string val = "";
        ss >> val;
        if (val == "#") 
            return NULL;
        else
        {
            TreeNode* node = new TreeNode(stoi(val));
            node->left = deserialize(ss);
            node->right = deserialize(ss);
            return node;
        }
    }
};

你可能感兴趣的:(需要好好想一下的题目,leetcode,For,C++,DFS深度优先搜索,leetcode,For,Java)