LintCode 7:Binary Tree Serialization

来源:互联网 发布:南京网络问政平台 编辑:程序博客网 时间:2024/05/18 07:43

Problem:Design an algorithm and write code to serialize and deserialize a binary tree. Writing the tree to a file is called 'serialization' and reading back from the file to reconstruct the exact same binary tree is 'deserialization'.


class Solution {public:/*** This method will be invoked first, you should design your own algorithm* to serialize a binary tree which denote by a root node to a string which* can be easily deserialized by your own "deserialize" method later.*/string serialize(TreeNode *root) {queue<TreeNode*> node;vector<string> result;TreeNode* tmp;node.push(root);while (!node.empty()) {tmp = node.front();node.pop();if (tmp)result.push_back(to_string(tmp->val));else {result.push_back("#");continue;}if (tmp->left)node.push(tmp->left);elsenode.push(nullptr);if (tmp->right)node.push(tmp->right);elsenode.push(nullptr);}string r;for (int i = 0;i<result.size();i++) {r += result[i] + " ";}return r;}/*** This method will be invoked second, the argument data is what exactly* you serialized at method "serialize", that means the data is not given by* system, it's given by your own serialize method. So the format of data is* designed by yourself, and deserialize it here as you serialize it in* "serialize" method.*/TreeNode *deserialize(string data) {istringstream iss(data);vector<TreeNode*> tree;TreeNode* tmp;string str;getline(iss, str, ' ');while (!str.empty()) {if (str != "#")tmp = new TreeNode(stoi(str));elsetmp = nullptr;tree.push_back(tmp);getline(iss, str, ' ');}TreeNode* head=tree[0];int parent = 0;int child = 1;while (child<tree.size()) {tmp = tree[parent];if (!tmp) {parent++;continue;}tmp->left = tree[child];tmp->right = tree[child+1];child += 2;parent++;}return head;}};


0 0