[LeetCode] Serialize and Deserialize N-ary Tree N叉搜索树的
? Serialization is the process of converting a data structure or object into a sequence of bits so that it can be stored in a file or memory buffer,or transmitted across a network connection link to be reconstructed later in the same or another computer environment. Design an algorithm to serialize and deserialize an N-ary tree. An N-ary tree is a rooted tree in which each node has no more than N children. There is no restriction on how your serialization/deserialization algorithm should work. You just need to ensure that an N-ary tree can be serialized to a string and this string can be deserialized to the original tree structure. For example,you may serialize the following? ? ? as? ? Note:
?
这道题让我们对N叉树进行序列化和去序列化,序列化就是将一个数据结构或物体转化为一个位序列,可以存进一个文件或者内存缓冲器中,然后通过网络连接在相同的或者另一个电脑环境中被还原,还原的过程叫做去序列化。现在让我们来序列化和去序列化一个二叉树,并给了我们例子。由于我们有了之前那道Serialize and Deserialize Binary Tree对二叉树的序列化和去序列化的基础,那么这道N叉树的方法也是大同小异了。首先 ? 解法一: class Codec { public: // Encodes a tree to a single string. string serialize(Node* root) { string res; serializeHelper(root,res); return res; } void serializeHelper(Node* node,string& res) { if (!node) res += "#"; else { res += to_string(node->val) + " " + to_string(node->children.size()) + " "; for (auto child : node->children) { serializeHelper(child,res); } } } // Decodes your encoded data to tree. Node* deserialize(string data) { istringstream iss(data); return deserializeHelper(iss); } Node* deserializeHelper(istringstream& iss) { string val = "",size = ""; iss >> val; if (val == "#") return NULL; iss >> size; Node *node = new Node(stoi(val),{}); for (int i = 0; i < stoi(size); ++i) { node->children.push_back(deserializeHelper(iss)); } return node; } }; ? ? ? 解法二: class Codec { public: // Encodes a tree to a single string. string serialize(Node* root) { if (!root) return "#"; string res; queue<Node*> q{{root}}; while (!q.empty()) { Node *t = q.front(); q.pop(); res += to_string(t->val) + " " + to_string(t->children.size()) + " "; for (Node *child : t->children) { q.push(child); } } return res; } // Decodes your encoded data to tree. Node* deserialize(string data) { istringstream iss(data); queue<Node*> qNode; queue<int> qSize; string val = "",size = ""; iss >> val; if (val == "#") return NULL; iss >> size; Node *res = new Node(stoi(val),{}),*cur = res; qNode.push(cur); qSize.push(stoi(size)); while (!qNode.empty()) { Node *t = qNode.front(); qNode.pop(); int len = qSize.front(); qSize.pop(); for (int i = 0; i < len; ++i) { if (!(iss >> val)) break; if (!(iss >> size)) break; if (val != "#") { cur = new Node(stoi(val),{}); qNode.push(cur); qSize.push(stoi(size)); t->children.push_back(cur); } } } return res; } }; ? 类似题目: Serialize and Deserialize BST? Serialize and Deserialize Binary Tree Encode N-ary Tree to Binary Tree ? LeetCode All in One 题目讲解汇总(持续更新中...) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |