您的位置:首页 > 其它

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

2017-12-10 09:09 417 查看
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;
}
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: