Albero binario di ricerca

di il
2 risposte

Albero binario di ricerca

Buongiorno a tutti, sto cercando di svolgere un esercizio di programmazione in C riguardante appunto un albero. Ho creato una funzione che cerca all'interno dell'albero un certo valore, restituendo 1 se è presente e 0 se non c'è.
Il problema è che la funzione ritorna 20 in ogni caso, quindi il programma non funziona in nessun modo.
Tutto il programma, fino alla fine del main, mi viene fornito, per cui posso operare solo sulla funzione, ho aggiunto solo una stampa al main, che mi mostra come la funzione find restituisca sempre 20.
Vi allego il codice completo.

# include <stdio.h>
# include <stdlib.h>

struct nodoAlberoBinario {
	int info ;
	struct nodoAlberoBinario *left;
	struct nodoAlberoBinario *right;
};
typedef struct nodoAlberoBinario NodoAlbero;
typedef NodoAlbero *AlberoBinario;

/* DICHIARAZIONE DELLE FUNZIONI / PROCEDURE DA DEFINIRE */
void insert(AlberoBinario *radice, int val);
int find(AlberoBinario radice, int k);

/* PROCEDURA PER RILASCIARE LA MEMORIA */
void free_tree (AlberoBinario radice)
{
	if ( radice != NULL ) {
		free_tree(radice->left);
		free_tree(radice->right);
		free(radice);
	}
}

/* MAIN */
int main (void)
{
	int i, n, k, num;
	AlberoBinario radice = NULL;
	scanf ("%d", &n);
	for (i=0; i<n ; ++i){
		scanf ("%d", &num);
		insert (&radice, num);
	}
	scanf ("%d" ,&k);
	if(find(radice, k)==1) printf("yes\n");
	else printf ("no\n");
	printf("%d", find(radice, k));
	free_tree (radice);
	return 0;

}

void insert(AlberoBinario *radice, int val){
	if (*radice == NULL){
		*radice = malloc(sizeof(NodoAlbero));
		(*radice)->info = val;
		(*radice)->left = NULL;
		(*radice)->right = NULL;
	}else{
		if((*radice)->info > val){
			insert(&((*radice)->left), val);
		}
		if((*radice)->info < val){
			insert(&((*radice)->right), val);
		}
	}
}

int find(AlberoBinario radice, int k){
	if(radice==NULL){
		return 0;
	}else{
		if(radice->info==k){
			return 1;
		}else{
			if(radice->info > k){
				find(radice->left, k);
			}
			if(radice->info < k){
				find(radice->right, k);
			}
		}
	}
}
Grazie in anticipo per l'aiuto.

2 Risposte

Devi accedere o registrarti per scrivere nel forum
2 risposte