这道题的思路可以参考剑指offer上序列化与反序列化二叉树问题,但要是想要在leetcode上AC的话需要使用注意输入和输出格式调整。
下面给出我的代码
class Codec {
public:
// Encodes a tree to a single string.
string serialize(TreeNode* root) {
string res;
serialize_helper(root, res); //实际的序列化二叉树
res = '[' + res;
assert(res[res.length() - 1] == ',');
res[res.length() - 1] = ']';
return res;
}
// Decodes your encoded data to tree.
TreeNode* deserialize(string data) {
TreeNode* root = NULL;
data = data.substr(1, data.length() - 2);
istringstream ss(data);
string token;
deque<string> res;
while(std::getline(ss, token, ','))
{
res.push_back(token);
}
deserialize(&root, res);
return root;
}
private:
void serialize_helper(TreeNode* root, string& res)
{
if(root == NULL)
{
res += "null,";
return;
}
res += (to_string(root -> val) + ',');
serialize_helper(root -> left, res);
serialize_helper(root -> right, res);
}
void deserialize(TreeNode** root, deque<string>& res)
{
if(!res.empty() && res.front() != "null")
{
int val = stoi(res.front());
*root = new TreeNode(val);
res.pop_front();
deserialize(&((*root) -> left), res);
deserialize(&((*root) -> right), res);
}
else if(!res.empty() && res.front() == "null")
res.pop_front();
}
};