真是醉了,节点终止是‘#’不是‘$’,坑死我了。。。一直爆栈。
#include<bits/stdc++.h>
using namespace std;
struct TreeNode{
int val;
struct TreeNode* left;
struct TreeNode* right;
TreeNode(int x):
val(x), left(NULL), right(NULL){}
};
void putit(vector<char>& v,int val){
stack<int> s;
while(val > 0){
s.push(val%10);
val/=10;
}
while(!s.empty()){
v.push_back(s.top() + '0');
s.pop();
}
v.push_back(',');
}
void todoit(vector<char>& v,TreeNode* p){
if( p == NULL){
v.push_back('#');
v.push_back(',');
return ;
}
putit(v,p->val);
todoit(v,p->left);
todoit(v,p->right);
}
char* Serialize(TreeNode* root){
vector<char> v;
todoit(v,root);
int L = v.size();
char* ans = new char[L];
for(int i=0;i<L;i++) ans[i] = v[i];
ans[L-1] = '\0';
return ans;
}
int getit(char* s,int& loc){
int sum = 0;
while(s[loc] != ',' && s[loc] != '\0'){
sum *= 10;
sum += (s[loc] - '0');
loc++;
}
if(s[loc] == ',') loc++;
return sum;
}
TreeNode* doit(char* str, int& loc){
if(str[loc] == '\0') return NULL;
if(str[loc] == '#'){
loc++;
if(str[loc] == ',') loc++;
return NULL;
}
TreeNode* p = new TreeNode(getit(str,loc));
p->left = doit(str,loc);
p->right = doit(str,loc);
return p;
}
TreeNode* Deserialize(char* str){
if(str == NULL) return NULL;
int loc = 0;
return doit(str,loc);
}
void print(TreeNode* p){
if(p == NULL) return;
printf("%d ",p->val);
print(p->left);
print(p->right);
}
int main(){
//char input[] = "10,20,40,#,#,#,30,50,#,#,60,#,#";
char input[] = "";
TreeNode* t = Deserialize(input);
print(t);
printf("\n");
printf("<%s>\n",Serialize(t));
return 0;
}