Download as doc, pdf, or txt
Download as doc, pdf, or txt
You are on page 1of 6

Arbori binari

Creare\Parcurgere
typedef struct nod{int info;
nod *st, *dr;
}NOD;
NOD *rad;
int n;
void creare(NOD *&rad)
{cin>>n;
if(n){rad=new NOD;
rad->info=n;
creare(rad->st);
creare(rad->dr);}
else rad=NULL;
}
void preord(NOD *rad)
{if(rad!=NULL) {cout<<rad->info<<" ";
preord(rad->st);
preord(rad->dr);
}
}
void inord( NOD *rad)
{if(rad!=NULL){inord(rad->st);
cout<<rad->info<<" ";
inord(rad->dr);
}
}
void postord(NOD *rad)
{if(rad!=NULL){postord(rad->st);
postord(rad->dr);
cout<<rad->info<<" ";
}
}
Inaltime
int max(int a,int b)
{return a>b?a:b;
}
int H(NOD *rad)
{if(rad==NULL) return -1;
else return 1+max(H(rad->st),H(rad->dr));
}

Forma parantezata
void paranteze(NOD *rad)
{if(rad->st==NULL &&rad->dr==NULL)cout<<rad->info;
else if(rad!=NULL){cout<<rad->info;
cout<<"(";
paranteze(rad->st);
cout<<",";
paranteze(rad->dr);
cout<<")";
}
}
Forma poloneza/ Valoarea expresiei
fstream f("exp.txt",ios::in);
typedef struct nod{char info;
nod *st,*dr;
}NOD;
int n,i,nr,v[100];
NOD *rad,*r;
char s[100],c;
int inord( NOD *rad)
{if(rad!=NULL) {if(rad->st==NULL && rad->dr==NULL) return v[rad->info-'a'];
else
{if(rad->info=='+' )return inord(rad->st)+inord(rad->dr);
if(rad->info=='-') return inord(rad->st)-inord(rad->dr);
if(rad->info=='*') return inord(rad->st)*inord(rad->dr);
if(rad->info=='/') return inord(rad->st)/inord(rad->dr);
}}
else return 0;
}
void urm()
{c=s[i];
i++; }
void termen(NOD *&r);
void factor(NOD *&r);
void putere(NOD *&r);
void expresie(NOD *&r)
{ NOD *p;
termen(r);
p=r;
while(c=='+'||c=='-') {r=new (NOD);
r->info=c;
r->st=p;
termen(r->dr);

p=r;
}
}
void termen(NOD *&r)
{NOD *p;
factor(r);
p=r;
while(c=='*'||c=='/') {r=new(NOD);
r->info=c;
r->st=p;
factor(r->dr);
p=r;
}
}
void factor(NOD *&r)
{NOD *p;
putere(r);
p=r;
if(i<n) urm();
while(c=='^') {r=new(NOD);
r->info=c;
r->st=p;
putere(r->dr);
p=r;
if(i<n) urm();
}
}
void putere(NOD *&r)
{ urm();
if(c=='(') { expresie(r);
}
else
{r=new(NOD);
r->info=c;
r->st=NULL;
r->dr=NULL;
}
}
void main()
{clrscr();
i=0;
f>>s;
n=strlen(s);
while(f>>c>>nr) v[c-'a']=nr;
expresie(r);
cout<<endl;
cout<<inord(r);
}

void main()
{gets(s); i=0;
n=srtlen(s);
expresie(r);
preord(r);
cout<<endl;
postord(r);
}

Oglindit
void oglindit(NOD *&rad)
{NOD *aux, *q;
if (rad!=NULL){ q=rad;
aux=rad->st;
rad->st=rad->dr;
rad->dr=aux;
rad=q;
oglindit(rad->st);
oglindit(rad->dr);
}
}
Arbori egali
int egali(NOD *r1,NOD *r2)
{if((r1==NULL &&r2==NULL) ||(r1!=NULL && r1->info==r2->info &&egali(r1->st,r2->st)
&&egali(r1->dr,r2->dr))) return 1;
else return 0;
}
Numar varfuri arbore
int numar(NOD *rad)
{if(rad!=NULL) return 1+numar(rad->st)+numar(rad->dr);
else return 0;
}
Arbori binari de cautare
Creare
void inserare(NOD*&rad,int k)
{if(rad==NULL)
{rad=new NOD;
rad->info=k;
rad->st=NULL;
rad->dr=NULL; }
else
if(rad->info>k)inserare(rad->st,k);
else
if(rad->info<k)inserare(rad->dr,k);
else

cout<<"nod gasit in arb";}


void creare()
{cin>>n;
int i,k;
for(i=1;i<=n;i++){cin>>k;
inserare(rad,k);
}

Cautare
int caut(NOD*rad,int x)
{if(rad!=NULL)
{if(rad->info==x)return 1;
else if(rad->info>x)return caut(rad->st,x);
else if(rad->info<x)return caut(rad->dr,x);
}else
return 0;}
Stergere
void stergere(NOD*&rad,int x)
{NOD*p,*q;
if(rad->info>x) stergere(rad->st,x);
else
if(rad->info<x) stergere(rad->dr,x);
else
if(rad->st==NULL) {p=rad;
rad=rad->dr;
delete p;
}
else
if(rad->dr==NULL) {p=rad;
rad=rad->st;
delete p;
}
else
{q=rad;
p=rad->st;
while(p->dr!=NULL){q=p;
p=p->dr;
}
rad->info=p->info;
if(rad->st==p) rad->st=p->st;
else
{q->dr=p->st;
delete p; } } }

Heapsort
void citire()
{int i;
cout<<"n=";cin>>n;
for(i=1;i<=n;i++){cout<<"a["<<i<<"]=";cin>>a[i];}
}
void schimba(int &a,int &b)
{int aux;
aux=a;
a=b;
b=aux;
}
void heap()
{int p,c,i;
for(i=1;i<=n;i++)
{
c=i;
p=c/2;
while(p>=1){if(a[c]>a[p]){schimba(a[c],a[p]);
c=p;
p=c/2;
}
else
p=0;
}
}}
void heapsort()
{int i,o,c,p;
for(i=n;i>=2;i--)
{schimba(a[1],a[i]);
p=1;
c=2;
while(c<=i-1) {if(c+1<=i-1 && a[c+1]>a[c])c++;
if(a[c]>a[p]){schimba(a[c],a[p]);
p=c;
c=2*p;
}
else
c=i;
}
}}
void afisare()
{int i;
for(i=1;i<=n;i++) cout<<a[i]<<" ";
}

You might also like