Advertisement
Guest User

Untitled

a guest
Nov 24th, 2015
81
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.84 KB | None | 0 0
  1. tno *removeno(tno *r, int dado){
  2.     tno *aux;
  3.  
  4.     if(!r) return NULL;
  5.     if(dado > r->dado) r->dir = removeno(r->dir, dado);
  6.     if(dado < r->dado) r->esq = removeno(r->esq, dado);
  7.     if(dado == r->dado){
  8.         if(!r->dir && !r->esq){
  9.             r->dado = NULL;
  10.             free(r);
  11.         }
  12.         if(!r->esq){
  13.             aux = r;
  14.             r = r->dir;
  15.             free(aux);
  16.         }else{
  17.             aux = r;
  18.             r = r->esq;
  19.             free(aux);
  20.         }
  21.         if(r->esq && r->dir){
  22.             aux = r->esq;
  23.             while (aux->dir){
  24.                 aux=aux->dir;
  25.             }
  26.             r->dado = aux->dado;
  27.             aux->dado = dado;
  28.             r->esq = removeno(r->esq,dado);
  29.         }
  30.         return r;
  31.     }
  32.  
  33. }
  34.  
  35. tno *busca_arvore(tno *r, int dado){
  36.     if(!r) return NULL;
  37.     if(dado == r->dado) return r;
  38.     else{
  39.         if  (dado > r->dado) return busca_arvore(r->dir, dado);     //RETORNA O ENDERECO DO NO
  40.         else return busca_arvore(r->esq , dado);
  41.     }
  42. }
  43.  
  44. int busca(tno *r, int dado){
  45.     if(!r) return 0;
  46.     if(dado == r->dado) return 1;
  47.     else{
  48.         if(dado > r->dado)return busca(r->dir, dado);       //RETORNA 1 SE O NO EXISTE E 0 SE NAO
  49.         else return busca(r->esq , dado);
  50.     }
  51. }
  52.  
  53. int maior(tno *r){
  54.     int maior_elem = r->dado;
  55.     if(r->dir) return maior(r->dir);        //ACHA O MAIOR NO
  56.     else return maior_elem;
  57. }
  58.  
  59. int menor(tno *r){
  60.     int menor_elem = r->dado;
  61.     if(r->esq) return menor(r->esq);        // ACHA O MENOR NO
  62.     else return menor_elem;
  63. }
  64.  
  65. int altura(tno *r){
  66.     int e, d;
  67.     if(!r) return -1;
  68.     e = 1 + altura(r->esq);         //ALTURA DA ARVORE
  69.     d = 1 + altura(r->dir);
  70.     if(e>d) return e;
  71.     else return d;
  72. }
  73.  
  74. int folhas(tno *r){
  75.     if(!r) return 0;
  76.     if(!r->esq && !r->dir) return 1;                                    //QUANTAS FOLHAS TEM A ARVORE
  77.     if(r->esq && r->dir) return folhas(r->esq) + folhas(r->dir);
  78.     if(!r->esq && r->dir) return folhas(r->dir);
  79.     if(r->esq && !r->dir) return folhas(r->esq);
  80. }
  81. tno *paidono(tno *r, int dado){
  82.     if(!r) return NULL;
  83.     if((r->dir->dado)== dado || (r->esq->dado) == dado){
  84.         return r;
  85.     }
  86.     else{                                                       // PAI DO NO QUE PROCURAMOS
  87.         if(dado < r->dado) return paidono(r->esq, dado);
  88.         else return paidono(r->dir, dado);
  89.     }
  90. }
  91.  
  92. tno *sucessordono(tno *r, int dado){
  93.     if(r->dir->dado == dado || r->esq->dado == dado){
  94.         if(r->esq->dado == dado){
  95.             return r->esq;
  96.         }
  97.         else if(r->dir->dado == dado){
  98.             return r->dir;                                          //SUCESSOR DO NO QUE PROCURAMOS
  99.         }
  100.     }
  101.     else{
  102.         if(dado < r->dado) return paidono(r->esq, dado);
  103.         else return paidono(r->dir, dado);
  104.     }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement