class Solution {
public:
char* Serialize(TreeNode* root) {
tree.clear();
PreTrav(tree, root);
return const_cast<char*>(tree.c_str());
}
TreeNode* Deserialize(char* str) {
if (!str) return nullptr;
TreeNode* result = nullptr;
result = Build(str, result);
return result;
}
private:
string tree="";
void PreTrav(string& tree, TreeNode* root)
{
if (!root)
{
tree.append("#");
return;
}
tree.append(to_string(root->val).append("!"));
PreTrav(tree, root->left);
PreTrav(tree, root->right);
}
TreeNode* Build(char* &str, TreeNode* node)
{
if (!str || *str == '\0') return nullptr;
if (*str == '#')
{
++str;
return nullptr;
}
node = new TreeNode(-1);
char* begin = str;
while (*str != '!') ++str;
string tmp(begin, str-begin);
node->val = atoi(tmp.c_str());
++str;
node->left = Build(str, node->left);
node->right = Build(str, node->right);
return node;
}
};