段错误,如何解决
报错:段错误:您的程序发生段错误,可能是数组越界,堆栈溢出(比如,递归调用层数太多)等情况引起,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; }