Advertisement
KillerBananaZ

Arbore cu radacina implementat dinamic

May 29th, 2017
400
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.25 KB | None | 0 0
  1.         Arbori cu radacina - implementare dinamica
  2.    
  3.     struct nod {                                                                        1
  4.                 tip_informatie inf;                                         2           3           4
  5.                 nod *succ[30];                                                         5 6      7  8  9  10
  6.                 };                                                                                    11
  7.  
  8.     CREARE:
  9. nod *rad;                                      
  10. int n; - numarul maxim de succesori ai unui nod
  11. intrare: 1 2 0 0 0 0 3 5 0 0 0 0 6 0 0 0 0 0 0 4 7 0 0 0 0 8 0 0 0 0 9 11 0 0 0 0 0 0 0 0 10 0 0 0 0 0
  12.  
  13. void creare(nod*&p)
  14. {
  15.     int x;
  16.     f >> x;
  17.     if(x==0)
  18.         p=NULL;
  19.     else
  20.     {
  21.     p = new nod;
  22.     p->inf=x;
  23.     for(int i=1;i<=n;i++)
  24.         creare(p->succ[i]);
  25.     }
  26. }
  27.  
  28.     Parcurgerea arborilor
  29.  
  30. Exista doua modalitati de parcurgere a arborilor:
  31.     1. Parcurgere in adancime
  32.         - parcurgerea in adancime se face in modul urmator:
  33.                 * daca nodul curent nu este NULL
  34.                     - atunci se prelucreaza informatia din nodul curent
  35.                     - se parcurg in adancime subarborii nodului curent
  36.         Ex.: 1 2 3 5 6 4 7 8 9 11 10
  37.  
  38. Din fisierul date.in se citesc de pe prima linie numarul maxim de succesori ai unui nod, iar de pe linia urmatoare informatiile atasate nodurilor unui arbore cu radacina. Valoarea nula va fi precizata prin intermediul valorii -1. Scrieti un program care va permite parcurgerea arborelui folosind parcurgerea in adancime.
  39.  
  40. void parcurgere(nod*p)
  41. {
  42.     if(p!=NULL)
  43.     {
  44.         cout << p->inf << " ";
  45.         for(int i=1;i<=n;i++)
  46.             parcurgere(p->succ[i]);
  47.     }
  48. }
  49.  
  50. Inaltimea arborelui cu radacina:
  51. int inaltime(nod*p)
  52. {
  53.     if(p!=NULL)
  54.     {
  55.         int mx=0;
  56.         for(int i=1;i<=n;i++)
  57.         {
  58.             if(mx<inaltime(p->succ[i]))
  59.                 mx=inaltime(p->succ[i]);
  60.         }
  61.         return 1+mx;
  62.     }
  63.     else
  64.         return 0;
  65. }
  66. Nodul maxim in arborele cu radacina:
  67. int nodmax(nod*p)
  68. {
  69.     if(p!=NULL)
  70.     {
  71.         int mx=p->inf;
  72.         for(int i=1;i<=n;i++)
  73.         {
  74.             if(mx<nodmax(p->succ[i]))
  75.                 mx=nodmax(p->succ[i]);
  76.         }
  77.         return mx;
  78.     }
  79.     else
  80.         return 0;
  81. }
  82.  
  83. Apeluri:
  84. int main()
  85. {
  86.     rad=NULL;
  87.     f >> n;
  88.     creare(rad,n);
  89.     cout << "Parcurgerea in adancime a arborelui este: ";
  90.     parcurgere(rad);
  91.     cout << endl;
  92.     cout <<"Inaltimea arborelui este: "<< inaltime(rad)<<endl;
  93.     cout <<"Nodul maxim este: "<< nodmax(rad);
  94.     return 0;
  95. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement