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 中前序构造BSTleetcode 106. Construct Binary Tree from Inorder and Postorder Traversal 中后序构造BSTleetcode 297. Serialize and Deserialize Binary Tree 二叉树的序列化和反序列化 + 深度优先遍历DFS一起学习,疑问做法感觉类似

代码如下:

#include <iostream>
#include <vector>
#include <map>
#include <unordered_map>
#include <set>
#include <unordered_set>
#include <queue>
#include <stack>
#include <string>
#include <climits>
#include <algorithm>
#include <sstream>
#include <functional>
#include <bitset>
#include <numeric>
#include <cmath>
#include <regex>

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;
        }
    }
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值