段错误,如何解决
报错:段错误:您的程序发生段错误,可能是数组越界,堆栈溢出(比如,递归调用层数太多)等情况引起,case通过率75%
#include<stdio.h>
#include<math.h>
struct Node{
Node *lchild;
Node *rchild;
int c;
}Tree[1001];
int loc=0;
Node *creat(){
Tree[loc].lchild=Tree[loc].rchild=NULL;
return &Tree[loc++];
}
Node *build(int x,Node *T){
if(T==NULL){
T=creat();
T->c=x;
return T;
}
else{
if(T->lchild==NULL){
T->lchild=build(x,T->lchild);
}else if(T->rchild==NULL){
T->rchild=build(x,T->rchild);
}
}
return T;
}
int ans[1001];
int inc=0;
void bianli(int x,Node *T){
if(x==1){
// printf(" %d",T->c);
ans[inc++]=T->c;
return;
}else{
bianli(x-1,T->lchild);
bianli(x-1,T->rchild);
}
return;
}
void init(){
inc=loc=0;
for(int i=0;i<1001;i++){
ans[i]=0;
Tree[i].lchild=Tree[i].rchild=NULL;
}
}
int main(){
int n,m;
while(scanf("%d",&n)!=EOF){
init();
Node *T=NULL;
for(int i=0;i<n;i++){
int x;
scanf("%d",&x);
T=build(x,T);
}
scanf("%d",&m);
if((int)pow(2,m-1)>n){
printf("EMPTY");
}else{
bianli(m,T);
for(int i=0;i<inc;i++){
if(i==0){
printf("%d",ans[i]);
}else{
printf(" %d",ans[i]);
}
}
}
printf("\n");
}
return 0;
}

