请实现两个函数,分别用来序列化和反序列化二叉树。
示例:
你可以将以下二叉树:
1
/ \
2 3
/ \
4 5序列化为 "[1,2,3,null,null,4,5]"
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/xu-lie-hua-er-cha-shu-lcof
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
自己太菜了,参考的题解
class Codec {
public:
// Encodes a tree to a single string.
string serialize(TreeNode* root) {
queue<TreeNode*> treeQueue;
TreeNode* cur = root;
ostringstream out;
treeQueue.push(cur);
while(!treeQueue.empty()) {
cur = treeQueue.front();
treeQueue.pop();
if(cur == nullptr) {
out << "null ";
} else {
out << cur->val << " ";
treeQueue.push(cur->left);
treeQueue.push(cur->right);
}
}
return out.str();
}
// Decodes your encoded data to tree.
TreeNode* deserialize(string data) {
if(data.empty()) return nullptr;
vector<TreeNode*> arr;
istringstream is(data);
string str;
while(is >> str) {
if(str == "null") {
arr.push_back(nullptr);
} else {
arr.push_back(new TreeNode(stoi(str)));
}
}
int j = 1;
for(int i = 0; i < arr.size(); i ++) {
if(arr[i] == nullptr) continue;
if(j < arr.size()) arr[i]->left = arr[j ++];
if(j < arr.size()) arr[i]->right = arr[j ++];
}
return arr[0];
}
};