Don't like ads? PRO users don't see any ads ;-)
Guest

Untitled

By: a guest on May 2nd, 2012  |  syntax: None  |  size: 2.72 KB  |  hits: 10  |  expires: Never
download  |  raw  |  embed  |  report abuse  |  print
Text below is selected. Please press Ctrl+C to copy to your clipboard. (⌘+C on Mac)
  1. #include <iostream>
  2. #include <cstdlib>
  3.  
  4. using namespace std;
  5.  
  6. struct Tnodo{
  7.        int info;
  8.        Tnodo* left;
  9.        Tnodo* right;
  10.        };
  11.        
  12. typedef Tnodo* Pnodo;
  13.  
  14. void menu();
  15. void insert(Pnodo&,int);
  16. Pnodo casuale(int);
  17. Pnodo inserimento(int,Pnodo,Pnodo);
  18. void stampa(Pnodo);
  19. bool verifica(Pnodo,int);
  20. void modifica(Pnodo,Pnodo&,int);
  21.        
  22. main(){
  23.        Pnodo A=NULL;
  24.        Pnodo B=NULL;
  25.        int i=0;
  26.        int n,k;
  27.        int sel;
  28.        int info;
  29.        
  30.        do{
  31.            menu();
  32.            cin>>sel;
  33.            switch(sel){
  34.              case 1:
  35.                   cout<<"Altezza albero ";
  36.                   cin>>n;
  37.                   A=casuale(n);                      
  38.              break;
  39.              case 2:
  40.                   stampa(A);
  41.                   cout<<endl;
  42.              break;  
  43.              case 3:
  44.                  // cout<<"inserisci il multiplo: ";
  45.                  // cin>>k;
  46.                   modifica(A,B,3);
  47.              break;
  48.              case 4:
  49.                   stampa(B);
  50.                   cout<<endl;
  51.              break;
  52.            }
  53.        }while(sel>0&&sel<5);    
  54.        
  55.        
  56.        system("pause");
  57.        }
  58.        
  59. void menu(){
  60.      
  61.      cout<<"1] Inserisci Albero. "<<endl;
  62.      cout<<"2] Stampa A."<<endl;
  63.      cout<<"3] Modifica. "<<endl;
  64.      cout<<"4] Stampa B. "<<endl;
  65.      cout<<"0] Esci. "<<endl;
  66.      
  67. }
  68.        
  69. void insert(Pnodo& A,int info){
  70.      
  71.      if(A==NULL){
  72.      A=new Tnodo;
  73.      A->info=info;
  74.      A->left=NULL;
  75.      A->right=NULL;
  76.      }
  77.      else if(info<A->info)
  78.        insert(A->left,info);
  79.      else
  80.        insert(A->right,info);    
  81.      
  82. }
  83.  
  84. Pnodo inserimento(int info,Pnodo As,Pnodo Ad){
  85.      
  86.        Pnodo A2;
  87.        A2=new Tnodo;
  88.        A2->info=info;
  89.        A2->left=As;
  90.        A2->right=Ad;
  91.        return A2;
  92.  
  93. }      
  94.  
  95. Pnodo casuale(int n){
  96.      
  97.       int info;
  98.       cout<<"Inserisci il valore: ";
  99.       cin>>info;
  100.      
  101.       if(n==0)
  102.       return inserimento(info,NULL,NULL);
  103.      
  104.       else
  105.       return inserimento(info,casuale(n-1),casuale(n-1));
  106.      
  107.      
  108. }
  109.  
  110. bool verifica(Pnodo B,int a){
  111.      
  112.      if(B!=NULL){
  113.        if(B->info==a);
  114.        return true;
  115.        
  116.      return(verifica(B->left,a)||verifica(B->right,a));
  117.      }
  118.      else
  119.        return false;    
  120.      
  121. }
  122.  
  123. void modifica(Pnodo A,Pnodo& B,int k){
  124.      
  125.      if(A!=NULL){
  126.        if((A->info%k!=0)&&(!verifica(B,A->info)))
  127.          insert(B,A->info);
  128.      modifica(A->left,B,k);
  129.      modifica(A->right,B,k);
  130.      }
  131.      
  132. }
  133.  
  134. void stampa(Pnodo A){
  135.      
  136.      if(A!=NULL){
  137.        stampa(A->left);
  138.        cout<<A->info<<" ";
  139.        stampa(A->right);
  140.        }
  141.        
  142. }