Advertisement
MouseyN1

de toate pentru test x2

Mar 18th, 2014
99
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.96 KB | None | 0 0
  1. //Citire/parcurgere/cautare arbore binar
  2. struct nod
  3.    {int nr_o;
  4.     nod*st,*dr;
  5.    };
  6.  
  7. nod *v;
  8. int n,k;
  9.  
  10. void inserare(nod *&c,int k)
  11. {if(c)
  12.    if(c->nr_o==k)
  13.         cout<<"nr deja inserat "<<endl;
  14.    else
  15.      if(c->nr_o<k)
  16.      inserare(c->dr,k);
  17.      else
  18.      inserare(c->st,k);
  19.  
  20.  else
  21.      {c=new nod;
  22.       c->nr_o=k;
  23.       c->st=c->dr=0;}
  24. }
  25.  
  26.  
  27. void svd(nod *c) //parcurgere in inordine
  28. {if(c)
  29.   {svd(c->st);
  30.    cout<<c->nr_o<<" ";
  31.    svd(c->dr);
  32.   }
  33.  }
  34.  
  35. int cautare(nod *c,int k)
  36. {if(c)
  37.     if(c->nr_o==k)
  38.     return 1;
  39.     else
  40.     if(c->nr_o<k)
  41.        cautare(c->dr,k);
  42.     else
  43.        cautare(c->st,k);
  44.  else
  45.     return 0;
  46. }
  47. void main()
  48. {//v=0;
  49.  cout<<"nr de noduri ";
  50.  cin>>n;
  51.  for(int i=1;i<=n;i++)
  52.    {cout<<"valoarea de inserat ";
  53.     cin>>k;
  54.     inserare(v,k);}
  55.  
  56.  cout<<endl<<"arborele are urmatoarele noduri "<<endl;
  57.  svd(v);
  58.  cout<<endl<<"valoarea de cautat ";
  59.  cin>>k;
  60.  if(cautare(v,k))
  61.     cout<<"s-a gasit!";
  62.  else
  63.     cout<<"nu s-a gasit!";
  64.  getch();
  65.  
  66. }
  67.  
  68. ---------------------------------------------------------
  69.  
  70. //Creare forma poloneza
  71.  
  72. #include<iostream>
  73. #include<string.h>
  74. using namespace std;
  75. #define MAX 100
  76. typedef struct nod{
  77.     char inf;
  78.     nod *st,*dr;
  79. }ARB;
  80. char e[MAX],efp[MAX];
  81. int p[MAX],pfp[MAX];
  82. ARB *rad;
  83. void Creare(ARB* &c,int li,int ls,char epf[],int pfp[])
  84. {
  85.     int i,j,min;
  86.     min=pfp[ls]; i=ls;
  87.     for(j=ls;j>=li;j--)
  88.         if(pfp[j]<min) { min=pfp[j]; i=j; }
  89.     c=new ARB; c->inf=efp[i];
  90.     if(li==ls)
  91.         c->st=c->dr=0;
  92.     else
  93.     {
  94.         Creare(c->st,li,i-1,efp,pfp);
  95.         Creare(c->dr,i+1,ls,efp,pfp);
  96.     }
  97. }
  98. void Parcurgere(ARB *c)
  99. {
  100.     if(c)
  101.     {
  102.         cout<<c->inf;Parcurgere(c->st); Parcurgere(c->dr);
  103.     }
  104. }
  105. int main()
  106. {
  107.     int i,j=0;
  108.     cout<<"introduceti expresia: "; gets(e);  
  109.     for(i=0;e[i];i++)
  110.         switch(e[i])
  111.     {
  112.         case ')': j-=10; break;
  113.         case '(': j+=10; break;
  114.         case '+':
  115.         case '-': p[i]=j+1; break;
  116.         case '*':
  117.         case '/': p[i]=j+10; break;
  118.         default: p[i]=1000;
  119.     }
  120.     j=-1;
  121.     for(i=0;e[i];i++)
  122.         if(e[i]!=')'&&e[i]!='(')
  123.         {
  124.             j++; efp[j]=e[i]; pfp[j]=p[i];
  125.         }
  126.     Creare(rad,0,j,efp,pfp);
  127.     cout<<"\nForma poloneza prefixata este: ";
  128.     Parcurgere(rad); cout<<"\n";
  129. return 0;
  130. }
  131.  
  132. -----------------------------
  133. //stergere nod arbore binar
  134. void cmd(nod* &c,nod* &f)
  135. {nod *aux;
  136.  if(f->dr)
  137.     cmd(c,f->dr);
  138.  else
  139.      {c->nr_o=f->nr_o;
  140.       aux=f;
  141.       f=f->st;
  142.       delete aux;
  143.       }
  144. }
  145.  
  146. void sterg(nod *&c,int k)
  147. {nod *aux,*f;
  148.  if(c)
  149.    if(c->nr_o==k)
  150.        if(c->st==0&&c->dr==0)  //daca e nod terminal
  151.        {delete c;
  152.         c=0;
  153.         }
  154.     else
  155.        if(c->st==0)     //are numai subordonat drept
  156.          {aux=c->dr;
  157.           delete c;
  158.           c=aux;}
  159.         else
  160.            if(c->dr==0)    //are numai subordonat drept
  161.           {aux=c->st;
  162.            delete c;
  163.            c=aux;}
  164.            else
  165.            cmd(c,c->st);  //are ambii subordonati
  166.  
  167.    else
  168.      if(c->nr_o<k)
  169.     sterg(c->dr,k);
  170.      else
  171.     sterg(c->st,k);
  172.  
  173.  else
  174.       cout<<"valoarea de sters nu se gaseste in arbore ";
  175. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement