定位当前值,使用s给char*指针所指向的元素赋值。注意,传进去的字符串参数需要是引用。
- 使用char*返回
string s;
char* res=new char[s.size()+1];
for(int i=0;i<s.size();i++)
res[i]=s[i];
res[s.size()]='\0';
return res;
- 使用char*初始化
TreeNode* der(char* str){
string data(str,str+len);
return build(data);//build不断浏览前面的元素,不断删除前面的元素
}
使用前序遍历对二叉树进行序列化和反序列化
/*
struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
TreeNode(int x) :
val(x), left(NULL), right(NULL) {
}
};
*/
class Solution {
public:
string s;
void ser(TreeNode* root){
if(root==NULL){
s+="#,";
return ;
}
s+=to_string(root->val)+",";
ser(root->left);
ser(root->right);
}
char* Serialize(TreeNode *root) {
ser(root);
char* res=new char[s.size()+1];
for(int i=0;i<s.size();i++)
res[i]=s[i];
s[s.size()]='\0';
return res;
}
TreeNode* build(string& s){
if(s.size()==0)
return NULL;
int pos=s.find_first_of(",");
if(s[0]=='#'){
s.erase(0,pos+1);
return NULL;
}
int val=atoi(s.substr(0,pos).c_str());
TreeNode* root=new TreeNode(val);
s.erase(0,pos+1);
root->left=build(s);
root->right=build(s);
return root;
}
TreeNode* Deserialize(char *str) {
string data(str,str+strlen(str));
return build(data);
}
};