题解 | 序列化二叉树
序列化二叉树
https://www.nowcoder.com/practice/cf7e25aa97c04cc1a68c8f040e71fb84
/*
struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
TreeNode(int x) :
val(x), left(NULL), right(NULL) {
}
};
*/
#include <string>
#include <vector>
class Solution {
public:
char* Serialize(TreeNode *root) {
if(root==nullptr)
{
char* p = new char[2];
p[0] = '#';
p[1] = '\0';
return p;
}
queue<TreeNode*> q;
vector<string> res;
q.push(root);
TreeNode* cur =nullptr;
while(!q.empty())
{
cur=q.front();
q.pop();
if(cur==nullptr)
{
res.push_back("#");
}
else
{
res.push_back(to_string(cur->val));
q.push(cur->left);
q.push(cur->right);
}
}
string result;
for(int i=0;i<res.size();i++)
{
if(i==0)
{
result=res[0];
}
else {
result +=","+res[i];
}
}
char* cstr = new char[result.size()+1];
strcpy(cstr,result.c_str());
return cstr;
}
TreeNode* Deserialize(char* str) {
if(str==nullptr)
{
return nullptr;
}
string strDes(str);
if(strDes.empty() ||strDes=="#")
{
return nullptr;
}
queue<TreeNode*> q;
stringstream ss(strDes);
string resstr;
TreeNode* root = nullptr;
//通过字符串流创建队列
//边解析,边建树
//创建根节点
getline(ss,resstr,',');
int val = stoi(resstr);
root = new TreeNode(val);
q.push(root);
while(!q.empty())
{
TreeNode* cur = q.front();
q.pop();
if(getline(ss,resstr,',')&&resstr!="#")
{
TreeNode* left = new TreeNode(stoi(resstr));
cur->left=left;
q.push(left);
}
if(getline(ss,resstr,',')&&resstr!="#")
{
TreeNode* right = new TreeNode(stoi(resstr));
cur->right=right;
q.push(right);
}
}
return root;
}
};
查看6道真题和解析
科大讯飞公司氛围 477人发布