Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- tno *removeno(tno *r, int dado){
- tno *aux;
- if(!r) return NULL;
- if(dado > r->dado) r->dir = removeno(r->dir, dado);
- if(dado < r->dado) r->esq = removeno(r->esq, dado);
- if(dado == r->dado){
- if(!r->dir && !r->esq){
- r->dado = NULL;
- free(r);
- }
- if(!r->esq){
- aux = r;
- r = r->dir;
- free(aux);
- }else{
- aux = r;
- r = r->esq;
- free(aux);
- }
- if(r->esq && r->dir){
- aux = r->esq;
- while (aux->dir){
- aux=aux->dir;
- }
- r->dado = aux->dado;
- aux->dado = dado;
- r->esq = removeno(r->esq,dado);
- }
- return r;
- }
- }
- tno *busca_arvore(tno *r, int dado){
- if(!r) return NULL;
- if(dado == r->dado) return r;
- else{
- if (dado > r->dado) return busca_arvore(r->dir, dado); //RETORNA O ENDERECO DO NO
- else return busca_arvore(r->esq , dado);
- }
- }
- int busca(tno *r, int dado){
- if(!r) return 0;
- if(dado == r->dado) return 1;
- else{
- if(dado > r->dado)return busca(r->dir, dado); //RETORNA 1 SE O NO EXISTE E 0 SE NAO
- else return busca(r->esq , dado);
- }
- }
- int maior(tno *r){
- int maior_elem = r->dado;
- if(r->dir) return maior(r->dir); //ACHA O MAIOR NO
- else return maior_elem;
- }
- int menor(tno *r){
- int menor_elem = r->dado;
- if(r->esq) return menor(r->esq); // ACHA O MENOR NO
- else return menor_elem;
- }
- int altura(tno *r){
- int e, d;
- if(!r) return -1;
- e = 1 + altura(r->esq); //ALTURA DA ARVORE
- d = 1 + altura(r->dir);
- if(e>d) return e;
- else return d;
- }
- int folhas(tno *r){
- if(!r) return 0;
- if(!r->esq && !r->dir) return 1; //QUANTAS FOLHAS TEM A ARVORE
- if(r->esq && r->dir) return folhas(r->esq) + folhas(r->dir);
- if(!r->esq && r->dir) return folhas(r->dir);
- if(r->esq && !r->dir) return folhas(r->esq);
- }
- tno *paidono(tno *r, int dado){
- if(!r) return NULL;
- if((r->dir->dado)== dado || (r->esq->dado) == dado){
- return r;
- }
- else{ // PAI DO NO QUE PROCURAMOS
- if(dado < r->dado) return paidono(r->esq, dado);
- else return paidono(r->dir, dado);
- }
- }
- tno *sucessordono(tno *r, int dado){
- if(r->dir->dado == dado || r->esq->dado == dado){
- if(r->esq->dado == dado){
- return r->esq;
- }
- else if(r->dir->dado == dado){
- return r->dir; //SUCESSOR DO NO QUE PROCURAMOS
- }
- }
- else{
- if(dado < r->dado) return paidono(r->esq, dado);
- else return paidono(r->dir, dado);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement