Árvore Binaria
#include
#include
typedef struct no { struct no *esq; struct no *dir; int valor;
}no;
void inserirNo(no **raiz,int elemento) { if(*raiz == NULL) { no *aux = (no *)malloc(sizeof(no)); aux->valor = elemento; aux->dir = aux->esq = NULL; *raiz = aux; return; } if(elemento < (*raiz)->valor) { inserirNo(&(*raiz)->esq,elemento); return; } if(elemento > (*raiz)->valor) { inserirNo(&(*raiz)->dir,elemento); return; } printf("Elemento %d ja existe na arvore.\n",elemento);
}
no *DoisFilhos(no *root) { if(root==NULL) return NULL; else if(root->esq == NULL) return root; else return DoisFilhos(root->esq);
}
void removerNo(no **raiz,int elemento) { if(elemento < (*raiz)->valor){ removerNo(&(*raiz)->esq,elemento); } else if(elemento > (*raiz)->valor){ removerNo(&(*raiz)->dir,elemento); } else if((*raiz)->esq!=NULL && (*raiz)->dir!=NULL){ no *aux= NULL; aux = DoisFilhos((*raiz)->dir); (*raiz)->valor = aux->valor; removerNo(&(*raiz)->dir,(*raiz)->valor); } else { no *aux = (*raiz); if((*raiz)->esq==NULL) { (*raiz) = (*raiz)->dir; } else { *raiz = (*raiz)->esq; } free(aux); }
}
void pesquisaPreOrdem(no *raiz) { if(raiz == NULL) return; printf("%d\n",raiz->valor); pesquisaPreOrdem(raiz->esq); pesquisaPreOrdem(raiz->dir);
}
int main() { char loop; int numero = 0; no *raiz = NULL;
while (loop != 'L') { scanf(" %c", &loop); switch(loop) { case 'i': scanf("%d", &numero); inserirNo(&raiz,numero); break; case 'r': scanf("%d", &numero); removerNo(&raiz,numero); break;