Binary tree printing only the left side

1

Hello. My binary tree is only printing the left side, what can it be? I'm using TAD to implement.

Tree structure:

typedef struct _no {
    int conteudo;
    struct _no *esquerda;
    struct _no *direita;
    struct _no *pai;
} Arvore;

Insertion function.

void inserir(Arvore **arv, int numero){
    Arvore *aux, *ant;
    aux = *arv;

    Arvore *novo;
    novo = (Arvore*) malloc(sizeof(Arvore));
    novo->direita = NULL;
    novo->esquerda = NULL;
    novo->conteudo = numero;

    if(estaVazia(*arv)){
        novo->pai = NULL;
        *arv = novo;
        return;
     }

    while (aux != NULL){
        ant = aux;

        if(numero > aux->conteudo){
            aux = aux->direita;
         }else{
            aux = aux->esquerda;
         }
     }

     if (numero > ant->conteudo){
        ant->direita = novo;
        novo->pai = aux;


     }else{
        ant->esquerda = novo;
        novo->pai = aux;

     }

     free(aux);
}

Print function

void preOrdem(Arvore *arv){

    printf("%d ", arv->conteudo);
    preOrdem(arv->esquerda);
    preOrdem(arv->direita);


}

Main file

int main(){

    Arvore *arvore;

    inicializarArvore(&arvore);
    inserir(&arvore,20);
    inserir(&arvore,25);
    inserir(&arvore,10);
    inserir(&arvore,5);
    inserir(&arvore,30);

    preOrdem(arvore);

}
    
asked by anonymous 29.08.2018 / 00:28

1 answer

3

Looking at the function prints and assuming that the other functions are well implemented, you can notice that it does not give return in the print function.

void preOrdem(Arvore *arv){
    if(arv==NULL)
       return;

    printf("%d ", arv->conteudo);
    preOrdem(arv->esquerda);
    preOrdem(arv->direita);
}

By its function it was in that node, when it is called again the function for arv->esquerda goes to a null node and will close the program.

There must be return to return to the number 7 and go to direita

    
29.08.2018 / 00:41