"Scrivere un programma che legga da tastiera una sequenza di N interi strettamente
positivi e li inserisca in un albero binario di ricerca, nell’ordine in
cui vengono forniti in input.
Dato un nodo y, si definisce:
• Somma interna I(y): somma di tutte le chiavi contenute nei nodi
interni del sottoalbero radicato in y, escluse quindi le foglie discendenti
da y ed escluso y stesso se esso è una foglia.
• Somma delle foglie F(y): somma di tutte le foglie discendenti da y,
incluso y se esso è una foglia.
Contare i nodi y dell’albero per cui vale che I(y)maggiore o uguale di F(y) e
(I(y) − F(y)) mod 7 = 0.
Il mio problema è la funzione "somma"(indicata con --->), non ho ben chiara la ricorsione, quindi non so bene come scriverla.
Potete aiutarmi?
Grazie!codice:#include<stdio.h> #include<stdlib.h> typedef struct _tree{ int dato; struct _tree *sx; struct _tree *dx; } tree; tree *inserisciAlbero(tree *u, int e){ tree *nodo=malloc(sizeof(tree)); nodo->dato=e; nodo->sx=nodo->dx=NULL; if(u==NULL) return nodo; if(e<=u->dato) u->sx=inserisciAlbero(u->sx, e); else u->dx=inserisciAlbero(u->dx, e); } ---> int somma(tree *u){ if(u==NULL) return -1; int sommaint=0; int sommafog=0; int k; if((u->sx!=NULL)||(u->dx!=NULL)) sommaint+=u->dato; if(u->sx!=NULL) sommaint=somma(u->sx); if(u->dx!=NULL) sommaint=somma(u->dx); if((u->sx==NULL)&&(u->dx==NULL)) sommafog+=u->dato; k=sommaint-sommafog; return k; } int ricerca(tree *u, int elem, int conta){ if(u==NULL) return 0; int sommaint=0; int sommafog=0; if(u->dato==elem){ int k=somma(u); if(k>=0 && k%7==0) conta++; return conta; } if(elem<u->dato){ u=u->sx; return ricerca(u, elem, conta); }else{ u=u->dx; return ricerca(u, elem, conta); } } int main(){ int i, n, e, *a, conta=0; tree* u=NULL; scanf("%d", &n); if(n<=0) return 0; a=malloc(n*sizeof(int)); for(i=0; i<n; i++){ scanf("%d", &e); if(e<=0) return 0; u=inserisciAlbero(u, e); a[i]=e; } for(i=0;i<n;i++) conta=ricerca(u, a[i], conta); printf("%d\n",conta); return 0; }

Rispondi quotando
