Habsburg

Polje Binarno stablo

Nov 15th, 2015
143
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.17 KB | None | 0 0
  1. #include <iostream>
  2. #include <vector>
  3.  
  4. const int VELPOLJA = 1000;
  5.  
  6. void ispis(int * polje, bool * pomPolje, int index) {
  7.     if(pomPolje[2 * index + 1] == true)
  8.         ispis(polje, pomPolje, 2 * index + 1);
  9.    
  10.     if(pomPolje[0] == true)
  11.         std::cout << polje[index] << " ";
  12.        
  13.     if(pomPolje[2 * index + 2] == true)
  14.         ispis(polje, pomPolje, 2 * index + 2);
  15. }
  16.  
  17. void unos(int * polje, bool * pomPolje, int vri, bool op = 1) {    
  18.     if(pomPolje[0] == false) {
  19.         pomPolje[0] = true;
  20.         polje[0] = vri;
  21.         std::cout << "Broj je smjesten na index: 0";
  22.         return;
  23.     }
  24.    
  25.     int index = 0;
  26.     bool found = false;
  27.    
  28.     while(!found) {
  29.         while(vri > polje[index] && pomPolje[2 * index + 2] == true)
  30.             index = 2 * index + 2;
  31.         while(vri <= polje[index] && pomPolje[2 * index + 1] == true)
  32.             index = 2 * index + 1;
  33.            
  34.         if(vri > polje[index] && pomPolje[2 * index + 2] == false)
  35.             found = true;
  36.         if(vri <= polje[index] && pomPolje[2 * index + 1] == false)
  37.             found = true;
  38.     }
  39.    
  40.     if(vri > polje[index])
  41.         index = 2 * index + 2;
  42.     else
  43.         index = 2 * index + 1;
  44.    
  45.     polje[index] = vri;
  46.     pomPolje[index] = true;
  47.     if(op)
  48.         std::cout << "Broj je smjesten na index: " << index;
  49.     return;
  50. }
  51.  
  52.  
  53. void brisanje(int * polje, bool * pomPolje) {
  54.     int num = 0;
  55.     std::cout << "Koji broj zelite izbrisati?: ";
  56.     std::cin >> num;
  57.    
  58.     std::vector<int> vec;
  59.     vec.reserve(50);
  60.     for(int i = 0; i < VELPOLJA; polje[i] = 0, pomPolje[i] = false, i++)
  61.         if(pomPolje[i] == true)
  62.             vec.push_back(polje[i]);
  63.        
  64.     int j = 0;
  65.     for(; j < vec.size(); ++j)
  66.         if(vec[j] == num)
  67.             break;
  68.    
  69.     if(j != vec.size())
  70.         vec.erase(vec.begin() + j);
  71.    
  72.     for(int i = 0; i < vec.size(); i++)
  73.         unos(polje, pomPolje, vec[i], false);
  74.        
  75. }
  76.  
  77. int main() {
  78.     int polje[VELPOLJA] = {};
  79.     bool pomPolje[VELPOLJA] = {};
  80.    
  81.     int izbor = 0;
  82.     int vri = 0;
  83.    
  84.     while(1) {
  85.         std::cout << "\n---IZBORNIK----\n1: upis elementa\n2: ipis stabla\n3: brisanje elemtna\nN: ";
  86.         std::cin >> izbor;
  87.         if(izbor == 1) {
  88.             std::cout << "Upisite vrijednost: ";
  89.             std::cin >> vri;
  90.             unos(polje, pomPolje, vri);
  91.         }
  92.         else if(izbor == 2)
  93.             ispis(polje, pomPolje, 0);
  94.         else if(izbor == 3)
  95.             brisanje(polje, pomPolje);
  96.     }
  97.    
  98.     return 0;
  99. }
Advertisement
Add Comment
Please, Sign In to add comment