рабочий поток istringstream с рекурсией в двоичном дереве сериализации и десериализации - PullRequest
0 голосов
/ 19 марта 2020

Итак, квестино - разработать алгоритм для сериализации и десериализации двоичного дерева. Нет никаких ограничений на то, как должен работать ваш алгоритм сериализации / десериализации. Вам просто нужно убедиться, что двоичное дерево может быть сериализовано в строку, и эта строка может быть десериализована в исходную древовидную структуру. У меня есть код решения, но я не могу понять 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.

...