-2
I’m having trouble converting two tree functions into C recursive form.
int insere_arvore(ArvBin* raiz, int valor){
if(raiz == NULL)
return 0;
NO* novo;
novo = (NO*) malloc(sizeof(NO));
if(novo == NULL)
return 0;
novo->info = valor;
novo->dir = NULL;
novo->esq = NULL;
if(*raiz == NULL)
*raiz = novo;
else{
NO* atual = *raiz;
NO* ant = NULL;
while(atual != NULL){
ant = atual;
if(valor == atual->info){
free(novo);
return 0;
}
if(valor > atual->info)
atual = atual->dir;
else
atual = atual->esq;
}
if(valor > ant->info)
ant->dir = novo;
else
ant->esq = novo;
}
return 1;
}
NO* remove_atual(NO* atual) {
NO *no1, *no2;
if(atual->esq == NULL){
no2 = atual->dir;
free(atual);
return no2;
}
no1 = atual;
no2 = atual->esq;
while(no2->dir != NULL){
no1 = no2;
no2 = no2->dir;
}
if(no1 != atual){
no1->dir = no2->esq;
no2->esq = atual->esq;
}
no2->dir = atual->dir;
free(atual);
return no2;
}
I tried it this way:
int insere_rec_arvore(ArvBin* raiz, int valor, NO* atual){
if(raiz == NULL)
return 0;
NO* novo;
novo = (NO*) malloc(sizeof(NO));
if(novo == NULL)
return 0;
novo->info = valor;
novo->dir = NULL;
novo->esq = NULL;
if(*raiz == NULL)
*raiz = novo;
else{
NO* atual = *raiz;
NO* ant = NULL;
if (atual != NULL) {
ant = atual;
if(valor == atual->info){
free(novo);
return 0;//elemento já existe
}
if(valor > atual->info) {
atual = atual->dir;
} else {
atual = atual->esq;
insere_rec_arvore(raiz, valor, atual);
}
}
if(valor > ant->info)
ant->dir = novo;
else
ant->esq = novo;
}
return 1;
}
NO* remove_rec_atual(NO* atual, NO *no1, NO *no2 ) {
if(atual->esq == NULL){
no2 = atual->dir;
free(atual);
return no2;
}
no1 = atual;
no2 = atual->esq;
if(no2->dir != NULL){
no1 = no2;
no2 = no2->dir;
remove_rec_atual(atual, no1, no2);
}
if(no1 != atual){
no1->dir = no2->esq;
no2->esq = atual->esq;
}
no2->dir = atual->dir;
free(atual);
return no2;
}
I couldn’t run the code.
Thank you.