CREARE ALBERO BINARIO BILANCIATO

di il
1 risposte

CREARE ALBERO BINARIO BILANCIATO

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;
  }
}
}

1 Risposte

Devi accedere o registrarti per scrivere nel forum
1 risposte