Advertisement
Guest User

Untitled

a guest
Dec 12th, 2017
71
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 10.26 KB | None | 0 0
  1. #include <iostream>
  2. #include <ctime>
  3. #include <time.h>
  4.  
  5.  
  6. using namespace std;
  7.  
  8. class drzewo
  9. {
  10.     struct wezel
  11.     {
  12.         int klucz;
  13.         char tab[10];
  14.         wezel* lewy;
  15.         wezel* prawy;
  16.         wezel(int wartosc)
  17.         {
  18.             klucz = wartosc;
  19.             lewy = NULL;
  20.             prawy = NULL;
  21.         }
  22.     };
  23.    
  24. public:
  25.     wezel* korzen;
  26.     int counter;
  27.    
  28. void inorder(wezel* IT)
  29.     {
  30.         if(korzen!=NULL)
  31.         {
  32.             if(IT->lewy != NULL)
  33.             {
  34.                 inorder(IT->lewy);
  35.             }
  36.             counter++;
  37.             cout<<IT->klucz<< " ";
  38.            
  39.             if(IT->prawy != NULL)
  40.             {
  41.                 inorder(IT->prawy);
  42.             }
  43.         }
  44.        
  45.     }
  46.    
  47.     void preorder(wezel* IT)
  48.     {
  49.         if(korzen!=NULL)
  50.         {
  51.             cout<<IT->klucz<< " ";
  52.             if(IT->lewy != NULL)
  53.             {
  54.                 preorder(IT->lewy);
  55.             }
  56.            
  57.            
  58.             if(IT->prawy != NULL)
  59.             {
  60.                 preorder(IT->prawy);
  61.             }
  62.         }
  63.        
  64.     }
  65.    
  66.     void postorder(wezel* IT)
  67.     {
  68.         if(korzen!=NULL)
  69.         {
  70.            
  71.             if(IT->lewy != NULL)
  72.             {
  73.                 postorder(IT->lewy);
  74.             }
  75.            
  76.            
  77.             if(IT->prawy != NULL)
  78.             {
  79.                 postorder(IT->prawy);
  80.             }
  81.             cout<<IT->klucz<< " ";
  82.         }
  83.        
  84.     }
  85.    
  86.    
  87. void wstawianie(int _klucz)
  88. {
  89.   if (korzen==NULL)
  90.   {
  91.       wezel* nowy;
  92.       nowy = new wezel(_klucz);
  93.       korzen = nowy;
  94.   }
  95.    else
  96.    {
  97.        wezel* IT = korzen;
  98.        bool powtarzanie=false;
  99.        
  100.        while ((IT->lewy!=NULL || IT->prawy!=NULL) && powtarzanie==false) //Sprawdzanie czy klucze sie powtarzaja
  101.        {
  102.         if(_klucz==IT->klucz)
  103.         {
  104.             powtarzanie=true;
  105.             cout << "klucz sie powtarza";
  106.             break;
  107.         }
  108.        if (IT > korzen)
  109.        {
  110.            if(IT->prawy == NULL) break;
  111.            IT = IT->prawy;
  112.        }
  113.        else
  114.        {
  115.            if(IT->lewy == NULL) break;
  116.            IT = IT->lewy;
  117.        }
  118.        
  119.        }
  120.        if (powtarzanie==false) //czy klucze sie powtarzaja
  121.        {
  122.            if(_klucz>IT->klucz)
  123.            {
  124.                wezel* nowy_wezel = new wezel(_klucz);
  125.                IT->prawy=nowy_wezel;
  126.            }
  127.            else
  128.            {
  129.                wezel* nowy_wezel = new wezel(_klucz);
  130.                IT->lewy=nowy_wezel;
  131.            }
  132.        }
  133.        
  134.    }
  135. }
  136.    
  137.     void generowanie(int liczba)
  138.     {
  139.         for(int i=0; i<liczba; i++)
  140.         {
  141.             this->wstawianie(rand() % 10000);
  142.         }
  143.     }
  144.    
  145. void wyszukaj(int _klucz)
  146.     {
  147.         if(korzen!=NULL)
  148.         {
  149.             if(korzen->klucz==_klucz)
  150.             {
  151.                 cout<<"Klucz zostal znaleziony w korzeniu!"<<endl;
  152.             }
  153.             else
  154.             {
  155.                 bool czy_znal = false;
  156.                
  157.                 wezel* IT = korzen;
  158.                 while(IT!=NULL)
  159.                 {
  160.                     if (IT->klucz==_klucz)
  161.                     {
  162.                         czy_znal=true;
  163.                         cout<<"Znalezlismu klucz"<<endl;
  164.                         break;
  165.                     }
  166.                     else
  167.                     {
  168.                         if(_klucz<IT->klucz)
  169.                         {
  170.                          IT = IT->lewy;
  171.                         }
  172.                         else
  173.                         {
  174.                           IT = IT->prawy;
  175.                         }
  176.                     }
  177.                 }
  178.                 if (czy_znal==false)
  179.                 {
  180.                     cout<<"Nie znaleziono takiego klucza"<<endl;
  181.                 }
  182.             }
  183.                
  184.         }
  185.     }
  186.    
  187.     wezel *nastepnik(wezel* IT)
  188.     {
  189.         wezel* znaleziony = IT;
  190.         if(znaleziony->prawy == NULL)
  191.         {
  192.             return znaleziony;
  193.         }
  194.        
  195.         znaleziony = znaleziony->prawy;
  196.         while (znaleziony->lewy!=NULL)
  197.         {
  198.             znaleziony = znaleziony->lewy;
  199.         }
  200.        
  201.         return znaleziony;
  202.     }
  203.  
  204.     wezel *znajdz_rodzica(wezel* IT)
  205.     {
  206.         wezel*  rodzic = IT;
  207.         if (IT==korzen)
  208.         {
  209.             return korzen;
  210.         }
  211.         else{
  212.             while(rodzic->lewy!=NULL || rodzic->prawy!=NULL)
  213.             {
  214.                 if(rodzic->lewy!=NULL)
  215.                     if (rodzic->lewy->klucz==IT->klucz)
  216.                         break;
  217.                 if(rodzic->prawy!=NULL)
  218.                     if(rodzic->prawy->klucz==IT->klucz)
  219.                         break;
  220.                 if(rodzic->klucz>IT->klucz)
  221.                     rodzic = rodzic->lewy;
  222.                 else
  223.                     rodzic = rodzic->prawy;
  224.             }
  225.         }
  226.         return rodzic;
  227.     }
  228.    
  229.    
  230.     void usuwanie(int _klucz)
  231.     {
  232.         if(korzen!=NULL)
  233.         {
  234.             if(_klucz==korzen->klucz) //Usuwanie klucza w korzeniu
  235.             {
  236.                 wezel* do_usuniecia = korzen;
  237.                
  238.                 if(korzen->prawy!=NULL) //usuwanie poprzez nastepnika
  239.                 {
  240.                     wezel* nast = nastepnik(korzen);
  241.                     wezel* rodzic = znajdz_rodzica(nast);
  242.                     if(rodzic!=korzen)
  243.                     {
  244.                         rodzic->lewy = nast->prawy;
  245.                     }
  246.                     nast->lewy = rodzic->lewy;
  247.                     if(korzen->prawy==nast)
  248.                     {
  249.                         nast->prawy = korzen->prawy->prawy;
  250.                     }
  251.                     else
  252.                     {
  253.                         nast->prawy = korzen->prawy;
  254.                     }
  255.                     korzen = nast;
  256.                     delete do_usuniecia;
  257.                 }
  258.                 else if (korzen->lewy!=NULL) //brak nastepnika
  259.                 {
  260.                     korzen = korzen->lewy;
  261.                     delete do_usuniecia;
  262.                 }
  263.                 else
  264.                 {
  265.                     korzen = NULL;
  266.                     delete do_usuniecia;
  267.                 }
  268.             }
  269.             else
  270.             {
  271.                 wezel* IT = korzen;
  272.                 bool czyjest = false;
  273.                 while(IT->lewy!=NULL || IT->prawy!=NULL)
  274.                 {
  275.                     if (IT->klucz==_klucz)
  276.                     {
  277.                         czyjest = true;
  278.                         break;
  279.                     }
  280.                     else
  281.                     {
  282.                         if(_klucz<IT->klucz)
  283.                         {
  284.                             IT = IT->lewy;
  285.                         }
  286.                         else
  287.                         {
  288.                             IT = IT->prawy;
  289.                         }
  290.                     }
  291.                 }
  292.                 if(czyjest == true)
  293.                 {
  294.                     wezel* rodzic = znajdz_rodzica(IT);
  295.                     if(IT->prawy!=NULL)
  296.                     {
  297.                         wezel* nast = nastepnik(IT);
  298.                         if (IT->prawy == nast)
  299.                         {
  300.                             nast->lewy = IT->lewy;
  301.                             if(rodzic->lewy == IT)
  302.                             {
  303.                                 rodzic->lewy = nast;
  304.                             }
  305.                             else
  306.                             {
  307.                                 rodzic->prawy = nast;
  308.                             }
  309.                        
  310.                         }
  311.                         else
  312.                         {
  313.                             IT->prawy->lewy = nast->prawy;
  314.                             nast->prawy = IT->prawy;
  315.                             nast->lewy = IT->lewy;
  316.                             if (rodzic->lewy == IT)
  317.                             {
  318.                                 rodzic->lewy = nast;
  319.                            
  320.                             }
  321.                             else
  322.                             {
  323.                                 rodzic->prawy = nast;
  324.                             }
  325.                         }
  326.                         delete IT;
  327.                     }
  328.                     else if (IT->lewy!=NULL)
  329.                     {
  330.                         wezel* rodzic = znajdz_rodzica(IT);
  331.                         if (rodzic->lewy==IT)
  332.                         {
  333.                             rodzic->lewy = IT->lewy;
  334.                            
  335.                         }
  336.                         else
  337.                         {
  338.                             rodzic->prawy = IT->lewy;
  339.                         }
  340.                         delete IT;
  341.                     }
  342.                     else
  343.                     {
  344.                         wezel* rodzic = znajdz_rodzica(IT);
  345.                         if (rodzic->prawy==IT)
  346.                         {
  347.                             rodzic->prawy = NULL;
  348.                         }
  349.                         else
  350.                         {
  351.                             rodzic->lewy = NULL;
  352.                         }
  353.                         delete IT;
  354.                     }
  355.                 }
  356.                 else
  357.                 {
  358.                     cout<<"Nie mozna usunac klucza, który nie istnieje"<<endl;
  359.                 }
  360.                
  361.             }
  362.            
  363.            
  364.         }
  365.     }
  366. };
  367.  
  368.  
  369.  
  370. int main()
  371. {
  372.     clock_t begin, end;
  373.     double time_spent;
  374.     begin = clock();
  375.     srand(time(NULL));
  376.    
  377.     ifstream plik;
  378.     plik.open("inlab03.txt");
  379.    
  380.     if (plik.good() == true)
  381.     {
  382.         cout << "Plik jest dostepny" <<endl;
  383.         plik.close();
  384.     }
  385.    
  386.     else cout << "Nie mozna otworzyć pliku" <<endl;
  387.     drzewo *mojedrzewo = new drzewo();
  388.     mojedrzewo->counter=0;
  389.     mojedrzewo->generowanie(1000);
  390.     mojedrzewo->inorder(mojedrzewo->korzen);
  391.     cout << endl << mojedrzewo->counter << endl;
  392.    
  393.    
  394.     end = clock();
  395.     time_spent = (double)(end - begin) / CLOCKS_PER_SEC;
  396.     cout << "Program wykonal sie w czasie: " << time_spent<<endl;
  397.     system("PAUSE");
  398.     return 0;
  399. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement