/* * Aluno: Gustavo Sverzut Barbieri RA.: 008849 * Prof.: Arnaldo Mat: mc102 */ #include #include typedef struct no { int val; struct no *esq, *dir; } NO_ARV, *ARV; /*** Declaracoes *******************************************************************************************/ ARV learv(void); void imprimearv(ARV arvore); void invertefilhos(ARV arvore); /*** main() ***********************************************************************************************/ int main() { ARV arvore; arvore = learv(); invertefilhos(arvore); imprimearv(arvore); printf("\n"); return 0; } /*** invertefilhos() ***************************************************************************************/ void invertefilhos(ARV arvore) { static int nivel = 0; int nivel_tmp; ARV tmp; if ((nivel%2) == 0) { /* Nivel Par, portanto o proximo sera impar */ /* Estamos num nivel para, consequentemente os filhos estao num nivel impar. * queremos trocar estes filhos de posicao, portanto, facamos isso: */ /* troque os filhos de posicao */ tmp = arvore->esq; arvore->esq = arvore->dir; arvore->dir = tmp; } nivel++; nivel_tmp = nivel; if (arvore->esq != NULL) invertefilhos(arvore->esq); nivel = nivel_tmp; if (arvore->dir != NULL) invertefilhos(arvore->dir); } /*** imprimearv() ******************************************************************************************/ void imprimearv(ARV arvore) { printf("("); if (arvore != NULL) { printf("%i",arvore->val); imprimearv(arvore->esq); imprimearv(arvore->dir); } else printf("0"); printf(")"); } /*** learv() ***********************************************************************************************/ /* Obs: Esta funcao foi dada pronta na prova. */ ARV learv(void) { ARV aux; int raiz; scanf("%d",&raiz); if (raiz) { aux=(ARV)malloc(sizeof(NO_ARV)); aux->val=raiz; aux->esq=learv(); aux->dir=learv(); return aux; } else return NULL; } /* author: Gustavo Sverzut Barbieri (http://www.gustavobarbieri.com.br) */