Advertisement
fcamuso

Algoritmi lezione 33 - Alberi binari

Jul 26th, 2024
242
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 2.50 KB | None | 0 0
  1. #include <iostream>
  2. #include <fstream>
  3. #include <cstdlib>
  4.  
  5. using namespace std;
  6.  
  7. class Albero_Binario {
  8.  
  9.   struct Nodo {
  10.     int chiave=0;
  11.     string valore="";
  12.  
  13.     Nodo *sx = nullptr;
  14.     Nodo *dx = nullptr;
  15.  
  16.     Nodo(int la_chiave, string il_valore)   {
  17.       chiave=la_chiave;
  18.       valore=il_valore;
  19.     }
  20.   };
  21.  
  22. public:
  23.   Albero_Binario() {}
  24.  
  25.   void inserisci(int la_chiave, string il_valore){
  26.     radice = inserisci_nodo(radice, la_chiave, il_valore);
  27.   }
  28.  
  29.   Nodo* inserisci_nodo(Nodo *nodo, int la_chiave, string il_valore) {
  30.     if (nodo==nullptr)
  31.       return new Nodo(la_chiave, il_valore);
  32.     else
  33.       if (la_chiave < nodo->chiave) //scendi a sinistra
  34.         nodo->sx = inserisci_nodo(nodo->sx, la_chiave, il_valore);
  35.       else  //scendi a destra
  36.         nodo->dx = inserisci_nodo(nodo->dx, la_chiave, il_valore);
  37.     return nodo;
  38.   }
  39.  
  40.   void stampa_pre_order() { pre_order(radice, "");}
  41.  
  42.   void pre_order(Nodo *nodo, string spaziatura)
  43.   {
  44.     if (nodo!=nullptr)
  45.     {
  46.        cout << spaziatura << nodo->chiave << ": " << nodo->valore<< endl;
  47.        spaziatura += "   ";
  48.  
  49.        pre_order(nodo->sx, spaziatura);
  50.        pre_order(nodo->dx, spaziatura);
  51.     }
  52.   }
  53.  
  54.   void stampa_post_order() { post_order(radice);}
  55.  
  56.   void post_order(Nodo *nodo)
  57.   {
  58.     if (nodo!=nullptr)
  59.     {
  60.        post_order(nodo->sx);
  61.        post_order(nodo->dx);
  62.  
  63.        cout << nodo->chiave << ": " << nodo->valore<< endl;
  64.     }
  65.   }
  66.  
  67.   void stampa_in_order() { in_order(radice);}
  68.  
  69.   void in_order(Nodo *nodo)
  70.   {
  71.     if (nodo!=nullptr)
  72.     {
  73.        in_order(nodo->dx);
  74.        cout << nodo->chiave << ": " << nodo->valore<< endl;
  75.        in_order(nodo->sx);
  76.     }
  77.   }
  78.  
  79.   string cerca(int chiave_ricerca) { return cerca_nodo(radice, chiave_ricerca); }
  80.  
  81.   string cerca_nodo(Nodo *nodo, int chiave_ricerca)
  82.   {
  83.  
  84.     if (nodo!=nullptr)
  85.       if (chiave_ricerca == nodo->chiave)
  86.         return nodo->valore;
  87.       else
  88.         if (chiave_ricerca < nodo->chiave)
  89.           return cerca_nodo(nodo->sx, chiave_ricerca);
  90.         else
  91.           return cerca_nodo(nodo->dx, chiave_ricerca);
  92.     else
  93.       return "";
  94.   }
  95.  
  96.   Nodo *radice = nullptr;
  97. private:
  98.  
  99. };
  100.  
  101. int main()
  102. {
  103.     Albero_Binario b;
  104.     b.inserisci(100,"Londra");
  105.     b.inserisci(45,"Milano");
  106.     b.inserisci(20,"New Deli");
  107.     b.inserisci(48,"Algeri");
  108.     b.inserisci(200,"Pechino");
  109.     b.inserisci(150,"Accra");
  110.     b.inserisci(220,"Brasilia");
  111.  
  112.     b.stampa_in_order();
  113.  
  114.  
  115.  
  116.  
  117.     return 0;
  118. }
  119.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement