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 <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;
}
}
};
还没有评论,来说两句吧...