Advertisement
Guest User

Untitled

a guest
Jan 19th, 2017
79
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.13 KB | None | 0 0
  1. #include <cstdlib>
  2. #include <iostream>
  3. using namespace std;
  4. //Zadanie 1
  5. struct el {
  6.     int v;
  7.     el* rodzic = NULL;
  8.     el* lewy = NULL;
  9.     el* prawy = NULL;
  10. };
  11. el* root = NULL;
  12.  
  13. void dodaj(int wartosc)
  14. {
  15.     el *nowy = NULL; //nowy element, ktory chcemy dodac
  16.     nowy = new el;
  17.     nowy->v = wartosc;
  18.     el *y = NULL; //wskazuje przegladanego rodzica
  19.     el *x = root; //kopia root
  20.  
  21.     while (x) //przechodzenie przez drzewo
  22.     {
  23.         if (nowy->v == x->v)
  24.         {
  25.             delete nowy;
  26.             exit(1);
  27.         }
  28.         y = x;
  29.         if (nowy->v < x->v)
  30.             x = x->lewy;
  31.         else
  32.             x = x->prawy;
  33.     }
  34.  
  35.     nowy->rodzic = y;
  36.  
  37.     if (!y) //jeli puste drzewo
  38.         root = nowy;
  39.     else
  40.         if (nowy->v < y->v)
  41.             y->lewy = nowy;
  42.         else
  43.             y->prawy = nowy;
  44. }
  45. void inorder(el* w)
  46. {
  47.     if (w)
  48.     {
  49.         inorder(w->lewy);
  50.         cout << w->v << " ";
  51.         inorder(w->prawy);
  52.     }
  53. }
  54.  
  55. void zadanie1() {
  56.     dodaj(15);
  57.     inorder(root);
  58.     cout << endl;
  59.  
  60.     dodaj(12);
  61.     inorder(root);
  62.     cout << endl;
  63.  
  64.     dodaj(18);
  65.     inorder(root);
  66.     cout << endl;
  67.  
  68.     dodaj(26);
  69.     inorder(root);
  70.     cout << endl;
  71.  
  72.     dodaj(20);
  73.     inorder(root);
  74.     cout << endl;
  75.  
  76.     dodaj(7);
  77.     inorder(root);
  78.     cout << endl;
  79.  
  80.     dodaj(3);
  81.     inorder(root);
  82.     cout << endl;
  83.  
  84.     dodaj(25);
  85.     inorder(root);
  86. }
  87.  
  88. //Zadanie 2
  89. const int N = 15;
  90. int kopiec1[N] = { 15,12,11,10,11,8,5,3,7,2,20,4,7,5,1 };
  91. int kopiec2[N] = { 15,12,11,10,11,8,5,3,7,2,9,4,7,12,1 };
  92.  
  93. void wynurz(int i, int kp[])
  94. {
  95.     if(i>0)
  96.     {
  97.         int ojciec=(i-1)/2;
  98.         if(kp[i]>kp[ojciec])
  99.         {
  100.             swap(kp[i],kp[ojciec]);
  101.             wynurz(ojciec, kp);
  102.         }
  103.     }
  104. }
  105.  
  106. void print(int kp[])
  107. {
  108.     for (int i = 0; i < N; i++)
  109.         cout << kp[i] << " ";
  110.     cout << endl;
  111. } //wydruk stanu kolejki
  112.  
  113. void zadanie2() {
  114.     cout<<"Kopiec przed wynurzeniu: ";
  115.     print(kopiec1);
  116.     wynurz(10, kopiec1);
  117.     cout<<"Kopiec po wynurzeniu: ";
  118.     print(kopiec1);
  119.     cout<<"Kopiec przed wynurzeniu: ";
  120.     print(kopiec2);
  121.     wynurz(13, kopiec2);
  122.     cout<<"Kopiec po wynurzeniu: ";
  123.     print(kopiec2);
  124. }
  125.  
  126. //MAIN
  127. int main(int argc, char** argv) {
  128.     //cout << "Zadanie 1" << endl; zadanie1();
  129.     cout << "Zadanie 2" << endl; zadanie2();
  130.     system("PAUSE");
  131.     return 0;
  132. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement