Итак, квестино - разработать алгоритм для сериализации и десериализации двоичного дерева. Нет никаких ограничений на то, как должен работать ваш алгоритм сериализации / десериализации. Вам просто нужно убедиться, что двоичное дерево может быть сериализовано в строку, и эта строка может быть десериализована в исходную древовидную структуру. У меня есть код решения, но я не могу понять dry прогон декодирования (десериализации) из-за использования istringstream:
class Codec {
public:
string serialize(TreeNode * root) {
string ret;
if(!root)
return "# ";
ret += to_string(root->val) + " ";
ret += serialize(root->left);
ret += serialize(root->right);
return ret;
}
TreeNode * deserialize(string data) {
istringstream ss(data);
return decode(ss);
}
private:
TreeNode *decode(istringstream &ss) {
string cur;
ss >> cur;
if(cur[0] == '#' || cur.empty())
return NULL;
TreeNode *root = new TreeNode(stoi(cur));
root->left = decode(ss);
root->right = decode(ss);
return root;
}
};
Каким будет dry запуск функции декодирования для [1,2,3, null, null, 4,5] или я просто хочу понять, как работает istringstream.