[RISOLTO]Aiuto con Albero Binario

di il
3 risposte

[RISOLTO]Aiuto con Albero Binario

Salve ragazzi,
qualcuno saprebbe dirmi come mai nonostante io stia copiando il listato dal libro mi porta questo errore quando compilo?
(Lo lascio in allegato lo screenshot)

Qui il codice di un semplice Albero Binario che esegue la Visita in ordine Anticipato e poi in ordine
simmetrica
#include <stdio.h>
#include <malloc.h>

struct  nodo{
int info;
struct nodo *left;
struct nodo *right;
};
typedef struct nodo Nodo;


Nodo *creaNodo(Nodo *p, int val){
if( p == NULL){ /*il punto di inserimento è stato reperito */
	/* Creazione del nodo */
	p = malloc(sizeof(Nodo));
	p->info = val;
	p->left = NULL;
	p->right = NULL;
}
else {    /* ricerca del punto di inserimento */
	if(val > p->info)
	/*visita il sottoalbero destro*/
	p->right = creaNodo(p->right, val);
	else
		if(val < p->info)
		/* visita il sottoalbero sinistro */
		p->left = creaNodo(p->left, val);
	}
	return(p); /*ritorna il puntatore alla radice */
}


Nodo *albBin(void){
	Nodo *p= NULL;
	Nodo x;
	
	do{
		printf("\nInserire una informazione (0 per finire): ");
		scanf("%d", &x.info);
		
		if (x.info != 0)
		p = creaNodo(p, x.info);  /*invoca creaNodo() */
	}
	while (x.info != 0);
	return(p); /* ritorna la radice dell' albero */
}

/* Visita l'albero binario in ordine anticipato */


void anticipato(Nodo *p){
	if(p!=NULL){
		printf("%d ", p->info);    /* visita la radice */
		anticipato(p->left);       /* visita il sottoalbero sinistro */
		anticipato(p->right);	   /* visita il sottoalbero destro */
	}
}


void simmetrico(Nodo *p){
	if(p != NULL){
	simmetrico(p->left);
	printf("%d		", p->info);
	simmetrico(p->right);
}
return;
}

void ricerca(Nodo *p, int val, Nodo **pEle){
	if (p!=NULL)
		if(val == p->info)//La ricerca ha dato esito positivo	
			*pELe = p; //pEle è passato per indirizzo per cui l'assegnamento di p avviene sul parametro attuale
	else{
		ricerca(p->left, val, pEle);
		ricerca(p->right, val, pEle);
	}
}


int main(void){
	Nodo *radice, *trovato;
	int chi;
	
	radice = albBin();
	printf("\nVISITA IN ORDINE ANTICIPATO\n");
	anticipato(radice);
	
	printf("\nVISITA IN ORDINE SIMMETRICO...\n");
	simmetrico(radice);
	
	printf("Inserire il valore da ricercare: ");
	scanf("%d", &chi);
	
	printf("\nRICERCA COMPLETA");
	trovato = NULL;
	ricerca(radice, chi, &trovato);
	if(trovato != NULL)
	printf("\n Elemento %d presente \n", trovato->info);
	else 
	printf("\n Elemento non presente\n ");
	
return 0;
}

Allegati:
16176_11a5692e3b01b33f98a54c3f4f3fe547.png
16176_11a5692e3b01b33f98a54c3f4f3fe547.png

3 Risposte

Devi accedere o registrarti per scrivere nel forum
3 risposte