Buon giorno a tutti..devo scrivere un programma che crei da zero un albero bilanciato..per farlo utilizzo tre funzioni ricorsive, conta() che conta il numero di nodi del sottoalbero di sx e di dx, insert() che inserisce un nodo alla foglia, e crea_a() che crea il primo nodo e dopo verifica tramite conta() in quale sottoalbero andare ad aggiungere il nuovo nodo..il problema è che la compilazione continua a darmi segmentation fault, però mi pare che come idea di fondo ci sono(più o meno) ma non riesco a capire cosa non funzioni cosa mi sfugge..GRAZIE MILLE A CHI MI RISPONDE
#include<iostream>
#include<fstream>
using namespace std;
struct nodo{int info; nodo* left, * right; nodo(int a=0, nodo* b=0, nodo* c=0){info=a;left =b; right=c;}};
int conta(nodo*r)
{
if(!r)
{return 0;}
else
{return conta(r->left)+conta(r->right)+1;}
}
bool cerca_cam(nodo*r, int k, int y)
{
}
nodo* insert(nodo*r,int x)
{
while(r)
{
if(!r->left&&!r->right)
{r=r->left;}
else
{r=r->right;}
}
if(!r)
{r=new nodo(x,0,0);}
}
void crea_a(nodo*&r,int dim,ifstream & INP)
{
if(dim==0&&!r)
{r=0;}
if(!r)
{int x;INP>>x;r=new nodo(x,0,0);crea_a(r,dim-1,INP);}
else {
if(conta(r->left)>=conta(r->right))
{int x;INP>>x;insert(r->left,x);crea_a(r,dim-1,INP);}
else {int x;INP>>x;insert(r->right,x);crea_a(r,dim-1,INP);}
}
}
void stampa_l(nodo* r,ofstream & OUT)
{
if(r)
{
OUT<<r->info<<"(";
stampa_l(r->left,OUT);
OUT<<" ";
stampa_l(r->right,OUT);
OUT<<")";
}
else
{OUT<<"_";}
}
main()
{
try{
ifstream INP("input");
ofstream OUT("output");
if(!INP) throw(0);
if(!OUT) throw(1);
int dim, k, y;
INP>>k>>y>>dim;
nodo*r=0;
crea_a(r,dim,INP);//da fare
stampa_l(r,OUT); //da fare
bool b=cerca_cam(r,k,y); //da fare
OUT<<endl<<b<<endl;
}
catch(int x)
{
switch(x)
{
case 0: cout<<"problemi con input"<<endl; break;
case 1: cout<<"problemi con output"<<endl; break;
}
}
}