段错误,如何解决

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


全部评论
bt一下
点赞 回复 分享
发布于 2018-06-14 19:51

相关推荐

点赞 评论 收藏
分享
评论
2
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务