Advertisement
Guest User

Untitled

a guest
Dec 22nd, 2014
135
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.38 KB | None | 0 0
  1. #include "R_B_Strom.h"
  2. #include <assert.h>
  3.  
  4. R_B_Strom::R_B_Strom()
  5. {
  6.     koren_ = NULL;
  7. }
  8.  
  9. R_B_Strom::R_B_Strom(Zbozi * zbozi)
  10. {
  11.     Uzel * temp = new Uzel(zbozi);
  12.     koren_ = temp;
  13. }
  14.  
  15. R_B_Strom::~R_B_Strom()
  16. {
  17.    
  18. }
  19.  
  20. Uzel * R_B_Strom::prarodic(Uzel * uzel)
  21. {
  22.     assert(uzel != NULL);
  23.     assert(uzel->rodic_ != NULL);
  24.     assert(uzel->rodic_->rodic_ != NULL);
  25.     return uzel->rodic_->rodic_;
  26. }
  27.  
  28. Uzel * R_B_Strom::sourozenec(Uzel * uzel)
  29. {
  30.     assert(uzel != NULL);
  31.     assert(uzel->rodic_ != NULL);  
  32.     if (uzel == uzel->rodic_->levyPotomek_)
  33.         return uzel->rodic_->pravyPotomek_;
  34.     return uzel->rodic_->levyPotomek_;
  35. }
  36.  
  37. Uzel * R_B_Strom::stryc(Uzel * uzel)
  38. {  
  39.     assert(uzel != NULL);
  40.     assert(uzel->rodic_ != NULL);
  41.     assert(uzel->rodic_->rodic_ != NULL);
  42.     return sourozenec(uzel->rodic_);
  43. }
  44.  
  45. Barva R_B_Strom::barva_uzlu(Uzel * uzel)
  46. {
  47.     return uzel == NULL ? CERNA : uzel->barva_;
  48. }
  49.  
  50. void R_B_Strom::nahrad_uzel(Uzel * puvodni, Uzel * novy)
  51. {
  52.     if (puvodni->rodic_ == NULL)
  53.     {
  54.         koren_ = novy;
  55.     }
  56.     else
  57.     {
  58.         if (puvodni == puvodni->rodic_->levyPotomek_)
  59.             puvodni->rodic_->levyPotomek_ = novy;
  60.         else
  61.             puvodni->rodic_->pravyPotomek_ = novy;
  62.     }
  63.     if (novy != NULL)
  64.     {
  65.         novy->rodic_ = puvodni->rodic_;
  66.     }
  67. }
  68.  
  69. void R_B_Strom::leva_rotace(Uzel * uzel)
  70. {
  71.     Uzel * R = uzel->pravyPotomek_;
  72.     nahrad_uzel(uzel, R);
  73.     uzel->pravyPotomek_ = R->levyPotomek_;
  74.     if (R->levyPotomek_ != NULL)
  75.     {
  76.         R->levyPotomek_->rodic_ = uzel;
  77.     }
  78.     R->levyPotomek_ = uzel;
  79.     uzel->rodic_ = R;
  80. }
  81.  
  82. void R_B_Strom::prava_rotace(Uzel * uzel)
  83. {
  84.     Uzel * L = uzel->levyPotomek_;
  85.     nahrad_uzel(uzel, L);
  86.     uzel->levyPotomek_ = L->pravyPotomek_;
  87.     if (L->pravyPotomek_ != NULL)
  88.     {
  89.         L->pravyPotomek_->rodic_ = uzel;
  90.     }
  91.     L->pravyPotomek_ = uzel;
  92.     uzel->rodic_ = L;
  93. }
  94.  
  95. #pragma region Vkladani_do_stromu
  96. void R_B_Strom::vloz_prvek(Zbozi * zbozi)
  97. {
  98.     Uzel * prvek = new Uzel(zbozi);
  99.  
  100.     if (koren_ == NULL)
  101.     {
  102.         koren_ = prvek;    
  103.     }
  104.     else
  105.     {
  106.         Uzel * temp = koren_;
  107.         while (true)
  108.         {
  109.             if (temp->identifikacniCislo_ == prvek->identifikacniCislo_)
  110.             {
  111.                 temp->cenaZaJeden_ = prvek->cenaZaJeden_;
  112.                 temp->pocetKusu_ += prvek->pocetKusu_;
  113.                 temp->cenaCelkem_ = temp->get_cena_celkem();
  114.                 return;
  115.             }
  116.             else if (temp->identifikacniCislo_ < prvek->identifikacniCislo_)
  117.             {
  118.                 if (temp->levyPotomek_ == NULL)
  119.                 {
  120.                     temp->levyPotomek_ = prvek;
  121.                     break;
  122.                 }
  123.                 else
  124.                     temp = temp->levyPotomek_;
  125.             }
  126.             else
  127.             {
  128.                 if (temp->pravyPotomek_ == NULL)
  129.                 {
  130.                     temp->pravyPotomek_ = prvek;
  131.                     break;
  132.                 }
  133.                 else
  134.                     temp = temp->pravyPotomek_;
  135.             }
  136.         }
  137.         prvek->rodic_ = temp;
  138.     }
  139.     vloz_prvek_pripad1(prvek);
  140.     over_vlastnosti(); 
  141. }
  142. void R_B_Strom::vloz_prvek_pripad1(Uzel * vkladany)
  143. {
  144.  
  145. }
  146. void R_B_Strom::vloz_prvek_pripad2(Uzel * vkladany)
  147. {
  148.    
  149. }
  150. void R_B_Strom::vloz_prvek_pripad3(Uzel * vkladany)
  151. {
  152.  
  153. }
  154. void R_B_Strom::vloz_prvek_pripad4(Uzel * vkladany)
  155. {
  156.  
  157. }
  158. void R_B_Strom::vloz_prvek_pripad5(Uzel * vkladany)
  159. {
  160.  
  161. }
  162. #pragma endregion NENÍ HOTOVÉ!
  163.  
  164. #pragma region Overeni_vlastnosti_stromu
  165. void R_B_Strom::over_vlastnosti()
  166. {
  167.     over_vlastnost_1();
  168.     over_vlastnost_2();
  169.     over_vlastnost_3();
  170.     over_vlastnost_4();
  171. }
  172.  
  173. void R_B_Strom::over_vlastnost_1(Uzel * uzel)
  174. {  
  175.     assert(barva_uzlu(uzel) == CERVENA || barva_uzlu(uzel) == CERNA);
  176.     if (uzel == NULL)
  177.         return;
  178.     over_vlastnost_1(uzel->levyPotomek_);
  179.     over_vlastnost_1(uzel->pravyPotomek_);
  180. }
  181.  
  182. void R_B_Strom::over_vlastnost_2()
  183. {
  184.     assert(barva_uzlu(koren_) == CERNA);
  185. }
  186.  
  187. void R_B_Strom::over_vlastnost_3(Uzel * uzel)
  188. {
  189.     if (barva_uzlu(uzel) == CERVENA)
  190.     {
  191.         assert(barva_uzlu(uzel->levyPotomek_) == CERNA);
  192.         assert(barva_uzlu(uzel->pravyPotomek_) == CERNA);
  193.         assert(barva_uzlu(uzel->rodic_) == CERNA);
  194.     }
  195.     if (uzel == NULL)
  196.         return;
  197.     over_vlastnost_3(uzel->levyPotomek_);
  198.     over_vlastnost_3(uzel->pravyPotomek_);
  199. }
  200.  
  201. void R_B_Strom::over_vlastnost_4()
  202. {
  203.     int cesta = -1;
  204.     over_vlastnost_4_pomocnik(koren_, 0, &cesta);
  205. }
  206.  
  207. void R_B_Strom::over_vlastnost_4_pomocnik(Uzel * uzel, int pocet, int * cerna_cesta)
  208. {
  209.     if (barva_uzlu(uzel) == CERNA)
  210.     {
  211.         pocet++;
  212.     }
  213.     if (uzel == NULL)
  214.     {
  215.         if (*cerna_cesta == -1)
  216.         {
  217.             *cerna_cesta = pocet;
  218.         }
  219.         else
  220.         {
  221.             assert(pocet == *cerna_cesta);
  222.         }
  223.         return;
  224.     }
  225.     over_vlastnost_4_pomocnik(uzel->levyPotomek_, pocet, cerna_cesta);
  226.     over_vlastnost_4_pomocnik(uzel->pravyPotomek_, pocet, cerna_cesta);
  227. }
  228. #pragma endregion
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement