daily pastebin goal
28%
SHARE
TWEET

Untitled

a guest Jan 21st, 2018 47 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include <iostream>
  2. #include <vector>
  3.  
  4. using namespace std;
  5. class Drzewko {
  6.  
  7. private:
  8.     struct Tree {
  9.         Tree *ojciec;
  10.         Tree *prawyBrat = NULL;
  11.         Tree *lewySyn = NULL;
  12.         vector<Tree *> listaSynow;
  13.         char chr;
  14.         int iloscLapek;
  15.     };
  16.  
  17.     Tree *pomOjciec = NULL;
  18.     int syn = 0;
  19.  
  20.     void deleteTree(Tree *korzen) {
  21.  
  22.     }
  23.  
  24.  
  25. public:
  26.     Tree *korzen = NULL;
  27.  
  28.  
  29.     void Add(int iloscLapek, char znak) {
  30.         if (pomOjciec == NULL) {
  31.             Tree *tr = new Tree;
  32.             pomOjciec = tr;
  33.             korzen = tr;
  34.  
  35.             pomOjciec->ojciec = NULL;
  36.             pomOjciec->chr = znak;
  37.             pomOjciec->iloscLapek = iloscLapek;
  38.  
  39.         } else {
  40.             if(pomOjciec->listaSynow.empty()){
  41.                 Tree *tr = new Tree;
  42.                 pomOjciec->listaSynow.push_back(tr);
  43.                 pomOjciec->listaSynow.back()->iloscLapek = iloscLapek;
  44.                 pomOjciec->listaSynow.back()->chr = znak;
  45.                 pomOjciec->listaSynow.back()->ojciec = pomOjciec;
  46.                 pomOjciec->lewySyn = pomOjciec->listaSynow.front();
  47.             }
  48.             else if (pomOjciec->listaSynow.size() < pomOjciec->iloscLapek) {
  49.                 Tree *tr = new Tree;
  50.                 pomOjciec->listaSynow.push_back(tr);
  51.                 pomOjciec->listaSynow.back()->iloscLapek = iloscLapek;
  52.                 pomOjciec->listaSynow.back()->chr = znak;
  53.                 pomOjciec->listaSynow.back()->ojciec = pomOjciec;
  54.                 pomOjciec->listaSynow[syn]->prawyBrat = pomOjciec->listaSynow.back()->prawyBrat;
  55.                 syn++;
  56.             } else if (pomOjciec->listaSynow.size() == pomOjciec->iloscLapek) {
  57.                 syn = 0;
  58.                 pomOjciec = pomOjciec->listaSynow.front();
  59.                 if (pomOjciec->listaSynow.size() == pomOjciec->iloscLapek) {
  60.                     if (pomOjciec->prawyBrat != NULL) {
  61.                         pomOjciec = pomOjciec->prawyBrat;
  62.                     } else if ((pomOjciec->prawyBrat == NULL) && (pomOjciec->ojciec->prawyBrat == NULL)){
  63.                         pomOjciec = korzen;
  64.                         while (pomOjciec->lewySyn != NULL)
  65.                             pomOjciec = pomOjciec->lewySyn;
  66.                     } else if ((pomOjciec->prawyBrat == NULL ) && (pomOjciec->ojciec->prawyBrat != NULL)){
  67.                         pomOjciec = pomOjciec->ojciec->prawyBrat->listaSynow.front();
  68.                     }
  69.  
  70.                 }
  71.  
  72.             }
  73.  
  74.         }
  75.     }
  76.  
  77.         void preorder ( Tree * korzen ){
  78.             odwiedz ( korzen );
  79.             if (korzen->lewySyn != NULL )
  80.                 preorder (korzen->lewySyn );
  81.             if (korzen->prawyBrat != NULL )
  82.                 preorder (korzen->prawyBrat );
  83.             }
  84.  
  85.  
  86.         void odwiedz(Tree *korzen) {
  87.         cout << korzen->chr << " ";
  88.         }
  89.  
  90. };
  91. int main() {
  92.     Drzewko drzewo;
  93.     int K; //ilosc pudelek
  94.     char znak;
  95.     int liczba;
  96.     cin >> K;
  97.     int N; // ilosc malpek w kazdym pudelku
  98.     for (int i = 0; i < K; i++) {
  99.         cin >> N;
  100.         for (int k = 0; k < N; k++) {
  101.             cin >> znak;
  102.             cin >> liczba;
  103.             drzewo.Add(liczba, znak);
  104.  
  105.         }
  106.         drzewo.preorder(drzewo.korzen);
  107.     }
  108.  
  109.     return 0;
  110. }
RAW Paste Data
Top