Guest User

Untitled

a guest
May 27th, 2018
187
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.32 KB | None | 0 0
  1. #include <QtCore/QCoreApplication>
  2. #include <iostream>
  3. using namespace std;
  4.  
  5. void inizializza ();
  6. struct dato *generanodo ();
  7. int leggidati (dato *d);
  8. int confrontadati(dato a, dato *p);
  9. struct dato *trovanodo (dato a, struct dato *p);
  10. void stamparicorsiva (struct dato *p);
  11. void stampaalbero();
  12. void menu();
  13.  
  14.  
  15. struct dato
  16. {
  17.     int num;
  18.     dato *ptrdx, *ptrsx;
  19. };
  20.  
  21. struct dato *radice;
  22.  
  23. void inizializza ()
  24. {
  25.     radice = NULL;
  26. }
  27.  
  28. struct dato *generanodo ()
  29. {
  30.     dato *p = NULL;
  31.     dato a;
  32.     int fine;
  33.     fine = leggidati(&a);
  34.     while(fine!=0)
  35.     {
  36.         trovanodo(a,p);
  37.     }
  38.     return p;
  39. }
  40.  
  41. int leggidati (dato *d)
  42. {
  43.     cout<<"Inserisci il numero che vuoi inserire.\n";
  44.     cin>> d->num;
  45.     return 1;
  46. }
  47.  
  48. int confrontadati(dato a, dato *p)
  49. {
  50.     if(a.num<p->num)
  51.     {
  52.         return 1;
  53.     }
  54.     else if(a.num>p->num)
  55.     {
  56.         return 2;
  57.     }
  58.     else if(a.num==p->num)
  59.     {
  60.         return 3;
  61.     }
  62. }
  63.  
  64. struct dato *trovanodo (dato a, struct dato *p)
  65. {
  66.     if (p==NULL)
  67.     {
  68.         p = new struct dato;
  69.         p->num = a;
  70.         p->ptrsx = NULL;
  71.         p->ptrdx = NULL;
  72.     }
  73.     else
  74.     {
  75.         switch (confrontadati(a, p->num))
  76.         {
  77.         case 1:
  78.             p->ptrsx = trovanodo(a, p->ptrsx);
  79.             break;
  80.         case 2:
  81.             p->ptrdx = trovanodo(a, p->ptrdx);
  82.             break;
  83.         case 3:
  84.             cout<< "Dato già presente, non inserito."<<endl;
  85.         }
  86.     }
  87.     return p;
  88. }
  89.  
  90. void stamparicorsiva (struct dato *p)
  91. {
  92.     if(p!=NULL)
  93.     {
  94.         stamparicorsiva(p->ptrsx);
  95.         leggidati(p->num);
  96.         stamparicorsiva(p->ptrdx);
  97.     }
  98.     return;
  99. }
  100.  
  101. void stampaalbero()
  102. {
  103.     cout<<"Stampa ordinata:"<<endl;
  104.     stamparicorsiva(radice);
  105.     return;
  106. }
  107.  
  108. void menu()
  109. {
  110.     cout<<"Scegli il numero corrispondente all'operazione da eseguire:\n";
  111.     cout<<"1) Inserisci nodo;\n";
  112.     cout<<"2) Ricerca nodo;\n";
  113.     cout<<"3) Visualizza l'albero in InOrder;\n";
  114.     cin>>risp;
  115.     switch(risp)
  116.     {
  117.         case 1:
  118.         generanodo();
  119.         case 3:
  120.         stampaalbero();
  121.  
  122.     }
  123. }
  124.  
  125. int main(int argc, char *argv[])
  126. {
  127.     QCoreApplication a(argc, argv);
  128.  
  129.     cout<<"Benvenuto al programma per la gestione di un albero binario;\n";
  130.  
  131.     menu();
  132.  
  133.     return a.exec();
  134. }
Add Comment
Please, Sign In to add comment