Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //Citire/parcurgere/cautare arbore binar
- struct nod
- {int nr_o;
- nod*st,*dr;
- };
- nod *v;
- int n,k;
- void inserare(nod *&c,int k)
- {if(c)
- if(c->nr_o==k)
- cout<<"nr deja inserat "<<endl;
- else
- if(c->nr_o<k)
- inserare(c->dr,k);
- else
- inserare(c->st,k);
- else
- {c=new nod;
- c->nr_o=k;
- c->st=c->dr=0;}
- }
- void svd(nod *c) //parcurgere in inordine
- {if(c)
- {svd(c->st);
- cout<<c->nr_o<<" ";
- svd(c->dr);
- }
- }
- int cautare(nod *c,int k)
- {if(c)
- if(c->nr_o==k)
- return 1;
- else
- if(c->nr_o<k)
- cautare(c->dr,k);
- else
- cautare(c->st,k);
- else
- return 0;
- }
- void main()
- {//v=0;
- cout<<"nr de noduri ";
- cin>>n;
- for(int i=1;i<=n;i++)
- {cout<<"valoarea de inserat ";
- cin>>k;
- inserare(v,k);}
- cout<<endl<<"arborele are urmatoarele noduri "<<endl;
- svd(v);
- cout<<endl<<"valoarea de cautat ";
- cin>>k;
- if(cautare(v,k))
- cout<<"s-a gasit!";
- else
- cout<<"nu s-a gasit!";
- getch();
- }
- ---------------------------------------------------------
- //Creare forma poloneza
- #include<iostream>
- #include<string.h>
- using namespace std;
- #define MAX 100
- typedef struct nod{
- char inf;
- nod *st,*dr;
- }ARB;
- char e[MAX],efp[MAX];
- int p[MAX],pfp[MAX];
- ARB *rad;
- void Creare(ARB* &c,int li,int ls,char epf[],int pfp[])
- {
- int i,j,min;
- min=pfp[ls]; i=ls;
- for(j=ls;j>=li;j--)
- if(pfp[j]<min) { min=pfp[j]; i=j; }
- c=new ARB; c->inf=efp[i];
- if(li==ls)
- c->st=c->dr=0;
- else
- {
- Creare(c->st,li,i-1,efp,pfp);
- Creare(c->dr,i+1,ls,efp,pfp);
- }
- }
- void Parcurgere(ARB *c)
- {
- if(c)
- {
- cout<<c->inf;Parcurgere(c->st); Parcurgere(c->dr);
- }
- }
- int main()
- {
- int i,j=0;
- cout<<"introduceti expresia: "; gets(e);
- for(i=0;e[i];i++)
- switch(e[i])
- {
- case ')': j-=10; break;
- case '(': j+=10; break;
- case '+':
- case '-': p[i]=j+1; break;
- case '*':
- case '/': p[i]=j+10; break;
- default: p[i]=1000;
- }
- j=-1;
- for(i=0;e[i];i++)
- if(e[i]!=')'&&e[i]!='(')
- {
- j++; efp[j]=e[i]; pfp[j]=p[i];
- }
- Creare(rad,0,j,efp,pfp);
- cout<<"\nForma poloneza prefixata este: ";
- Parcurgere(rad); cout<<"\n";
- return 0;
- }
- -----------------------------
- //stergere nod arbore binar
- void cmd(nod* &c,nod* &f)
- {nod *aux;
- if(f->dr)
- cmd(c,f->dr);
- else
- {c->nr_o=f->nr_o;
- aux=f;
- f=f->st;
- delete aux;
- }
- }
- void sterg(nod *&c,int k)
- {nod *aux,*f;
- if(c)
- if(c->nr_o==k)
- if(c->st==0&&c->dr==0) //daca e nod terminal
- {delete c;
- c=0;
- }
- else
- if(c->st==0) //are numai subordonat drept
- {aux=c->dr;
- delete c;
- c=aux;}
- else
- if(c->dr==0) //are numai subordonat drept
- {aux=c->st;
- delete c;
- c=aux;}
- else
- cmd(c,c->st); //are ambii subordonati
- else
- if(c->nr_o<k)
- sterg(c->dr,k);
- else
- sterg(c->st,k);
- else
- cout<<"valoarea de sters nu se gaseste in arbore ";
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement