Estou tendo problema na função busca(Falha de segmentação) ..
Código:
typedef struct a{ int dado; struct a *esq, *dir;}no;//função de inserirvoid insere(no **novo, int dado){ if(!*novo)//Testa se o ponteiro *novo não tem endereço { *novo= (no*)malloc(sizeof(no));// Aloca um nó, seu endereço é inserido no ponteiro *novo. (*novo)->esq = NULL; (*novo)->dir = NULL; (*novo)->dado = dado; } else if(dado > (*novo)->dado) insere(&(*novo)->dir,dado); else insere(&(*novo)->esq,dado);}//outras funções...no *busca(no **raiz, int dado)//*busca retorna o endereço de um nó{ if(*raiz) { if((*raiz)->dado == dado) { no *aux = *raiz; return aux; } if((*raiz)->dado > dado) busca(&(*raiz)->esq,dado); else busca(&(*raiz)->dir,dado); } else return NULL;}//mainvoid main(){ no *raiz = NULL, *aux; int dado; char op; while(1) { printf("\n@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@"); printf("\n@ @"); printf("\n@ 1-Insere\t 2-Imprime\t3-Altura\t4-BuscarNo @"); printf("\n@ 5-Consultar\t 6-Maior\t7-Menor\t8-Remover @"); printf("\n@ 9-ConsultarPai @"); printf("\n@ @"); printf("\n@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@\nOP:"); scanf(" %c",&op); system("clear"); switch(op) { case'1':printf("\nDigite o dado a ser inserido:"); scanf("%d",&dado); insere(&raiz,dado);break; case'2':imprime_ordem(raiz);break; case'3':printf("\nA Altura é: %d",altura(raiz));break; case'4':printf("\nDigite o dado do no a ser buscado: "); scanf("%d",&dado); aux = busca(&raiz,dado); if(aux) printf("No com dado %d, a esquerda %d e a direita %d",aux->dado,aux->esq->dado,aux->dir->dado); else printf("Nao existe");break; case'5':printf("Digite o dado a ser consultado: "); scanf("%d",&dado); if(consulta_no(raiz,dado)) printf("O no foi encontrado"); else printf("Nao foi possivel encontrar"); case'6':printf("\nO maior valor %d",maior(raiz));break; case'7':printf("\nO menor valor %d",menor(raiz));break; case'8':printf("Digite o dado que deseja remover: "); scanf("%d",&dado);remove_no(&raiz,dado);break; case'9':printf("Digite o no que deseja saber o pai: "); scanf("%d",&dado); aux = pai(raiz,dado); printf("\nO no pai %d, filho esq %d filho dir %d",aux->dado, (aux->esq)? aux->esq->dado : 0, (aux->dir)?aux->dir->dado : 0); break; } }}