先序遍历序列化二叉树
struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
TreeNode(int x) :
val(x), left(NULL), right(NULL) {
}
};
*/
class Solution {
private:
string s="";
int cur=0;
public:
void dfs(TreeNode *root){
if(root==NULL)
{
s+="#,";
return;
}
s+=to_string(root->val);
s+=",";
dfs(root->left);
dfs(root->right);
}
char* Serialize(TreeNode *root) {
dfs(root);
char *ret=new char[s.length()+1];
strcpy(ret,s.c_str());
return ret;
}
TreeNode* create_dfs(){
if(cur>=s.size())
return NULL;
TreeNode* node=NULL;
if(s[cur]=='#')
{
cur+=2;
return node;
}else{
int num=0;
while(s[cur]!=','){
num=num*10+s[cur]-'0';
cur++;
}
node=new TreeNode(num);
cur++;
}
node->left=create_dfs();
node->right=create_dfs();
return node;
}
TreeNode* Deserialize(char *str) {
string s=str;
cout<<s<<endl;
TreeNode* ans=NULL;
ans=create_dfs();
return ans;
}
};