You are on page 1of 4

/*

pr baza criteriului de constructie al unui arbore binar prezentat la curs,


construiti un arbore binar in care se insereaza
minim 10 noduri, si sa se implementeze urmatoarele:
*o functie care returneaza inaltimea arborelui
*o functie care returneaza o lista continand nodurile de pe nivelul cu cele
mai multe noduri
*extrageti nodurile corespunzatoare acelui nivel(afisare)
*/
#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <cstring>
#include <math.h>

struct ANOD {

int prob;
ANOD* st;
ANOD* dr;
};

int criteriu(int x, int y)


{int c;
if( x==y )
return 0;
else
if(x < y)
return -1;
else
if(x > y)
return 1;
}

ANOD* insnod(ANOD* st,int total)


{
ANOD *p, *q;
p=new ANOD;
p->prob=total;
p->st=NULL;
p->dr=NULL;
if (st==NULL){ // arbore gol!
st=p;
}
else
{
q=st;
for(;;)
{
// se insereaza in subarborele sting
if(total%2!=0){
if(criteriu((int)trunc(total/2),(int)trunc(total/2+1))<0)
{ if (q->st==NULL)
{
q->st=p;
break;
}
else
{
q=q->st; // cauta pina ajunge la frunza
continue;
}
}
// se insereaza in subarborele drept
if(criteriu((int)trunc(total/2),(int)trunc(total/2+1))>0)
{
if (q->dr==NULL)
{
q->dr=p;
break;
}
else
{
q=q->dr;
continue;
}
}
}
else{
if(criteriu((int)total/2),((int)total/2+1)<0)
{ if (q->st==NULL)
{
q->st=p;
break;
}
else
{
q=q->st; // cauta pina ajunge la frunza
continue;
}
}
// se insereaza in subarborele drept
if(criteriu(((int)total/2),((int)total/2+1)>0))
{
if (q->dr==NULL)
{
q->dr=p;
break;
}
else
{
q=q->dr;
continue;
}
} ;

}}
}
return st;
}

void afiseaza(ANOD* p)
{
printf("%d \n",p->prob);
}
void inord(ANOD* p)
{
if (p!=NULL) {
inord(p->st);
afiseaza(p);
inord(p->dr);
}
}

int adancime(ANOD* nod){


ANOD* q;
int c=0;
int max=6;

return max;
}

int main()
{ int j=0,i=0;int lung,k,total;
FILE *f;
char nume[20];
char c[5];
int v[20],prob;
ANOD *start;

if(!(f=fopen("partial.txt","r")))
{printf("Eroare deschidere fisier.");
getch();
return 0;
}
else{
fscanf(f,"%s%[, \n\t]",nume,c);
printf("%s\n",nume);
lung=strlen(nume);
for(i=0;i<lung;i++)
v[i]=0;
for(i=0;i<lung;i++)
for(j=0;j<lung;j++)
if(nume[i]==nume[j])
v[i]++;

i=0;
while(i<lung-1)
{
j=i+1;
while(j<lung)
{
if(nume[i]==nume[j])
{
k=j;
while(k<lung-1)
{
v[k]=v[k+1];
nume[k]=nume[k+1];

k++;
}
nume[k+1]='\0';
lung--;
}
j++;
}
i++;

}
total=0;
for(i=0;i<lung;i++)
total+=v[i];
for(i=0;i<lung;i++)
printf("%d,",v[i]);
printf("\n %d \n",total);

insnod(start,total);
do{

}while(total==0);

// insnod(start, );
}

printf("Afisarea arborelui. \n");


//inord(start);

getch();
}

You might also like