Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- struct _arvore {
- int info;
- struct _arvore *sae;
- struct _arvore *sad;
- };
- typedef struct _arvore arvore;
- void criarArvore(arvore **raiz) {
- *raiz = NULL;
- }
- void inserir(arvore **raiz, int numero) {
- if(*raiz == NULL) {
- *raiz = (arvore *) malloc(sizeof(arvore));
- (*raiz)->sae = NULL;
- (*raiz)->sad = NULL;
- (*raiz)->info = numero;
- }
- else {
- if(numero < (*raiz)->info)
- inserir(&(*raiz)->sae, numero);
- if(numero > (*raiz)->info)
- inserir(&(*raiz)->sad, numero);
- }
- }
- arvore *MaiorDireita(arvore **no){
- if((*no)->sad != NULL)
- return MaiorDireita(&(*no)->sad);
- else{
- arvore *aux = *no;
- if((*no)->sae != NULL)
- *no = (*no)->sae;
- else
- *no = NULL;
- return aux;
- }
- }
- arvore *MenorEsquerda(arvore **no){
- if((*no)->sae != NULL)
- return MenorEsquerda(&(*no)->sae);
- else{
- arvore *aux = *no;
- if((*no)->sad != NULL)
- *no = (*no)->sad;
- else
- *no = NULL;
- return aux;
- }
- }
- void remover(arvore **raiz, int numero){
- if(*raiz == NULL){
- printf("Numero nao existe na arvore!");
- return;
- }
- if(numero < (*raiz)->info)
- remover(&(*raiz)->sae, numero);
- else
- if(numero > (*raiz)->info)
- remover(&(*raiz)->sad, numero);
- else{
- arvore *pAux = *raiz;
- if (((*raiz)->sae == NULL) && ((*raiz)->sad == NULL)){
- free(pAux);
- (*raiz) = NULL;
- }
- else{
- if ((*raiz)->sae == NULL){
- (*raiz) = (*raiz)->sad;
- pAux->sad = NULL;
- free(pAux); pAux = NULL;
- }
- else{
- if ((*raiz)->sad == NULL){
- (*raiz) = (*raiz)->sae;
- pAux->sae = NULL;
- free(pAux); pAux = NULL;
- }
- else{
- pAux = MaiorDireita(&(*raiz)->sae);
- pAux->sae = (*raiz)->sae;
- pAux->sad = (*raiz)->sad;
- (*raiz)->sae = (*raiz)->sad = NULL;
- free((*raiz)); *raiz = pAux; pAux = NULL;
- }
- }
- }
- }
- }
- void exibirEmOrdem(arvore *raiz){
- if(raiz != NULL){
- exibirEmOrdem(raiz->sae);
- printf("\n%i", raiz->info);
- exibirEmOrdem(raiz->sad);
- }
- }
- void exibirInversa(arvore *raiz){
- if(raiz != NULL){
- exibirInversa(raiz->sad);
- printf("\n%i", raiz->info);
- exibirInversa(raiz->sae);
- }
- }
- int main(int argc, char const *argv[]) {
- arvore **arvore;
- criarArvore(arvore);
- inserir(arvore, 50);
- inserir(arvore, 25);
- inserir(arvore, 32);
- inserir(arvore, 14);
- inserir(arvore, 41);
- inserir(arvore, 10);
- inserir(arvore, 23);
- inserir(arvore, 5);
- inserir(arvore, 1);
- inserir(arvore, 52);
- printf("Em ordem\n");
- exibirEmOrdem(*arvore);
- printf("\n\nInversa\n");
- exibirInversa(*arvore);
- printf("\n\n");
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement