// identicoTAB*copia(TAB*a){if(!a)returnNULL;// aloca uma nova arvoreTAB*novo=(TAB*)malloc(sizeof(TAB));// copia a informaçãonovo->info=a->info;// copia as subarvoresnovo->esq=copia(a->esq);novo->dir=copia(a->dir);returnnovo;}
TAB*maior(TAB*a){if(!a)returna;TAB*result=a;// maior elem da sub-arv da esquerdaTAB*e=maior(a->esq);// maior elem da sub-arv da direitaTAB*d=maior(a->dir);// comparar o elemento da raiz com os maiores das sub-arvoresif(e&&e->info>result->info)result=e;if(d&&d->info>result->info)result=d;returnresult;}
Comparando duas árvores
intigual(TAB*a,TAB*b){// duas arvores vaziasif(!a&&!b)return1;// uma das arvores vazia, a outra naoif(!a||!b)return0;// se as raizes forem iguais, as sub arvores tambem preciam ser iguasif(a->info==b->info)returnigual(a->esq,b->esq)&&igual(a->dir,b->dir);return0;}
Retirando os nos pares de uma árvore
TAB*retira_pares(TAB*a){if(!a)returnNULL;// retiro os pares das minhas duas sub-arvoresa->esq=retira_pares(a->esq);a->dir=retira_pares(a->dir);// se a raiz for par...if(a->info%2==0){// se for uma folhaif(!a->esq&&!a->dir){free(a);returnNULL;}// trocar a raiz com um elem de uma sub-arvore// como ja foram tirado os pares das sub-arvores, garanto que esse elemento nao vai ser parTAB*aux=a->esq;if(!aux)aux=a->dir;// trocandointtmp=aux->info;aux->info=a->info;a->info=tmp;// depois da troca, tentar retirar de novoa=retira_pares(a);}returna;}
TABB*ab2abb(TAB*a){if(!a)returnNULL;int*v=ab2vet(a);// alguma funcao qualquer para ordenar vsort(v);returnvet2abb(v,nn(a));}TABB*vet2abb(int*v,intn){if(n==0)returnNULL;returnTAB_cria(v[n/2],vet2abb(v,n/2),vet2abb(v+n/2+1,n-n/2-1));}
Top comments (0)
Subscribe
For further actions, you may consider blocking this person and/or reporting abuse
We're a place where coders share, stay up-to-date and grow their careers.
Top comments (0)