一道用数组表示二叉树的例题,不断WA,一直没注意条件
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <queue>
#include <vector>
using namespace std;
int left[300],right[300],value[300];
char s[1000];
int cnt=0;
vector<int> ans;
bool isComplete=true;
void insert(int v,char* s){
int p=0;
for (int i=0; i<strlen(s); i++) {
if (s[i]=='L') {
int l=left[p];
if (l) p=l;
else {left[p]=++cnt;p=cnt;}
}else if (s[i]=='R'){
int r=right[p];
if (r) p=r;
else {right[p]=++cnt;p=cnt;}
}
}
if (value[p])
isComplete= false;
value[p]=v;
}
bool bfs(){
queue<int> Q;
Q.push(0);
while (!Q.empty()) {
int cur=Q.front();Q.pop();
if (!value[cur]) return false;
ans.push_back(value[cur]);
int l=left[cur],r=right[cur];
if (l) Q.push(l);
if (r) Q.push(r);
}
return true;
}
int main() {
while (scanf("%s",s)!=EOF) {
if (strcmp(s, "()")!=0){
int v;
sscanf(s+1, "%d",&v);
insert(v,strchr(s, ',')+1);
continue;
}
if (isComplete){
isComplete=bfs();
if (!isComplete) printf("not complete\n");
else{
for (int i=0; i<ans.size(); i++) {
if(i) printf(" ");
printf("%d",ans[i]);
}
printf("\n");
}
}
else printf("not complete\n");
cnt=0;ans.clear();isComplete=true;
memset(left, 0, sizeof(left));
memset(right, 0, sizeof(right));
memset(value, 0, sizeof(value));
}
return 0;
}