Advertisement
Erzkoy

liczenie poziomow w drzewie

Jan 24th, 2019
151
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.71 KB | None | 0 0
  1. #include <iostream>
  2. #include <cstdlib>
  3. using namespace std;
  4.  
  5. class kulka
  6. {
  7. public:
  8.     int v;
  9.     int numer;
  10.  
  11.     kulka *dol=NULL;
  12.     kulka *lewy=NULL;
  13.     kulka *prawy=NULL;
  14.     kulka *next=NULL;
  15.  
  16.     int poziom;
  17.  
  18.     kulka(int numer=0)
  19.     {
  20.         this->numer=numer;
  21.         this->v = rand()%50;
  22.         cout<<"K: "<<v<<"\t";
  23.         this->poziom=0;
  24.     }
  25.  
  26.     void showdrzewo()
  27.     {
  28.         if (lewy) lewy->showdrzewo();
  29.         cout << v<< "\t" ;
  30.         if (prawy) prawy ->showdrzewo();
  31.     }
  32.  
  33.  
  34.  
  35.    void hist(kulka * nowa)
  36.     {
  37.         if (nowa->v == v)
  38.         {
  39.             if (next==NULL)
  40.             {
  41.                 next=nowa;
  42.  
  43.             }
  44.  
  45.            else  next->hist(nowa);
  46.         }
  47.         else
  48.         {
  49.            if (dol==NULL) dol=nowa;
  50.             else  dol->hist(nowa);
  51.         }
  52.  
  53.     }
  54.  
  55.  
  56.     void drzewo(kulka *nowa)
  57.     {
  58.          if (nowa->v<v)
  59.         {
  60.             if (lewy==NULL) lewy=nowa;
  61.             else lewy->drzewo(nowa);
  62.         }
  63.         else
  64.         {
  65.             if (prawy==NULL) prawy=nowa;
  66.             else prawy->drzewo(nowa);
  67.         }
  68.     }
  69.  
  70.  
  71.      void show2()
  72.     {
  73.  
  74.         cout << v << "\t";
  75.         if (next)  next->show2();
  76.         else cout<<endl;
  77.         if (dol)  dol->show2();
  78.     }
  79.  
  80.  
  81.     bool go(int l)
  82.     {
  83.         if (l==9) return true;
  84.         bool t=false;
  85.        if (next)  t=t|next->go(l+1);
  86.        if (dol)
  87.        {
  88.  
  89.            t=t|dol->go(0);
  90.        }
  91.        return t;
  92.     }
  93.     void ile_poziomow(int &liczba_poziomow)
  94.     {
  95.         if(lewy)
  96.         {
  97.         lewy->poziom=poziom+1;
  98.             if(lewy->poziom>liczba_poziomow) liczba_poziomow=lewy->poziom;
  99.         lewy->ile_poziomow(liczba_poziomow);
  100.         }
  101.         if(prawy)
  102.         {
  103.         prawy->poziom=poziom+1;
  104.             if(prawy->poziom>liczba_poziomow) liczba_poziomow=prawy->poziom;
  105.         prawy->ile_poziomow(liczba_poziomow);
  106.         }
  107.  
  108.     }
  109.     int licznik_histogram()
  110.   {
  111.     int temp;
  112.     if(v%5==0)
  113.     {
  114.         temp=1;
  115.     }
  116.     else
  117.     {
  118.         temp=0;
  119.     }
  120.     if(next)  temp+=next->licznik_histogram();
  121.     if(dol)  temp+=dol->licznik_histogram();
  122.  
  123.     return temp;
  124.  
  125.   }
  126.    int licznik_drzewo()
  127.   {
  128.     int temp;
  129.     if(v%5==0)
  130.     {
  131.         temp=1;
  132.     }
  133.     else
  134.     {
  135.         temp=0;
  136.     }
  137.     if(lewy)  temp+=lewy->licznik_drzewo();
  138.     if(prawy)  temp+=prawy->licznik_drzewo();
  139.  
  140.     return temp;
  141.  
  142.   }
  143.  
  144.  
  145. };
  146.  
  147. int main()
  148. {
  149.     kulka *roothist=NULL;
  150.         kulka *rootdrzew2=NULL;
  151.         kulka *rootdrzew=NULL;
  152.         int liczba_poziomow=0;
  153.  
  154. do{
  155.     //for (int i=0; i<100; i++){
  156.     int i=0;
  157.      kulka *nowa= new kulka(i);
  158. i++;
  159.     if (nowa->v%3==0)
  160.     {
  161.  
  162.         if (roothist==NULL)
  163.         {
  164.             roothist=nowa;
  165.      }
  166.         else  roothist->hist(nowa);
  167.     }
  168.     else if(nowa->v%2==0)
  169.     {
  170.         if (rootdrzew2==NULL)
  171.         {
  172.             rootdrzew2=nowa;
  173.      }
  174.         else  rootdrzew2->drzewo(nowa);
  175.     }
  176.  
  177.     else {
  178.         if (rootdrzew==NULL)
  179.         {
  180.             rootdrzew=nowa;
  181.      }
  182.         else  rootdrzew->drzewo(nowa);
  183.     }
  184.     //}
  185.  }while (roothist->go(0)==false);
  186.  
  187.  
  188.     roothist->show2();
  189.     cout<<endl;
  190.     rootdrzew2->showdrzewo();
  191.     cout<<endl;
  192.     cout<<endl;
  193.     rootdrzew->showdrzewo();
  194.     cout<<endl;
  195.     rootdrzew->ile_poziomow(liczba_poziomow);
  196.  
  197.     cout<<"liczba: "<<liczba_poziomow+1<<endl;
  198.     cout<<endl;
  199.     cout<<"Podzielne przez 5 na drzewie parzystym: "<<rootdrzew2->licznik_drzewo()<<endl;
  200.     cout<<"Podzielne przez 5 na drzewie nieparzystym: "<<rootdrzew->licznik_drzewo()<<endl;
  201.     cout<<"Podzielne przez 5 na histogramie: "<<roothist->licznik_histogram()<<endl;
  202.  
  203.  
  204.     return 0;
  205. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement