Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /* ====================================
- Incluindo bibliotecas
- =====================================*/
- #include<stdio.h>
- #include<stdlib.h>
- #include<locale.h>
- /* ====================================
- Struct do Nó
- =====================================*/
- typedef struct No{
- int valor;
- int balanceamento;
- struct No* esquerda;
- struct No* direita;
- }no;
- /* ====================================
- Protótipo das funções
- =====================================*/
- struct No* raiz;
- struct No* inserir(struct No* no_raiz, int numero);
- void em_ordem(struct No* no_raiz);
- void pre_ordem(struct No* no_raiz);
- void pos_ordem(struct No* no_raiz);
- struct No* buscar_numero(struct No* no_raiz, int num);
- void menu();
- /* ====================================
- Função main
- =====================================*/
- int main(){
- //Ajustando o idioma
- setlocale(LC_ALL,"Portuguese");
- //Chamando a função menu
- menu();
- //Tratamento de erro
- return 0;
- }
- /* ====================================
- Função menu
- =====================================*/
- void menu(){
- //Variáveis
- int opcao, num, valor, i;
- do{
- system("cls");
- printf("1 - Inserir elemento.\n");
- printf("2 - Buscar elemento.\n");
- printf("3 - Remover elemento.\n");
- printf("4 - Mostrar árvore.\n");
- printf("5 - Sair.\n");
- printf("Digite a opção desejada: ");
- scanf("%d", &opcao);
- switch(opcao){
- case 1:
- raiz = NULL;
- printf("Digita quantos números deseja inserir: ");
- scanf("%d", &num);
- for(i=0; i<num; i++){
- printf("Número %d: ", i+1);
- scanf("%d", &valor);
- raiz = inserir(raiz, valor);
- printf("Número %d inserido com sucesso!\n", valor);
- }
- system("pause");
- break;
- case 2:
- printf("Digite o número que deseja procurar: ");
- scanf("%d", &num);
- buscar_numero(raiz, num);
- system("pause");
- break;
- case 3:
- case 4:
- printf("Em ordem: ");
- em_ordem(raiz);
- printf("\n");
- printf("Pré-Ordem: ");
- pre_ordem(raiz);
- printf("\n");
- printf("Pós-Ordem: ");
- pos_ordem(raiz);
- printf("\n");
- system("pause");
- break;
- case 5:
- printf("Saindo do programa...\n");
- sleep(1);
- system("pause");
- break;
- default:
- printf("Opção inválida!\n");
- system("pause");
- break;
- }
- }while(opcao!=5);
- }
- /* ====================================
- Função inserir na árvore
- =====================================*/
- struct No* inserir(struct No* no_raiz, int numero){
- //Inserindo o primeiro elemento na árvore
- if(no_raiz==NULL)
- {
- //Alocando espaço para o elemento
- no_raiz = (struct No*)malloc(sizeof(struct No));
- //Colocando no campo valor o primeiro número da árvore
- no_raiz->valor = numero;
- //Setando os ponteiros esquerda e direita em nulos
- no_raiz->esquerda = NULL;
- no_raiz->direita = NULL;
- }
- //Caso já existam elementos irá inserir de forma recursiva na esquerda
- else if(numero < no_raiz->valor){
- no_raiz->esquerda = inserir(no_raiz->esquerda, numero);
- }
- //Caso já existam elementos irá inserir de forma recursiva na direita
- else{
- no_raiz->direita = inserir(no_raiz->direita, numero);
- }
- //Retornando o struct
- return no_raiz;
- }
- /* ====================================
- Função buscar número
- =====================================*/
- struct No* buscar_numero(struct No* no_raiz, int num){
- //Verificando se a árvore está vazia
- if(no_raiz == NULL){
- printf("A árvore está vazia ou número não encontrado!\n");
- system("pause");
- menu();
- }
- else{
- while(no_raiz != NULL){
- //Chamando de forma recursiva pela direita para encontrar o número
- if(num > no_raiz->valor){
- no_raiz->direita = buscar_numero(no_raiz->direita, num);
- }
- //Chamando de forma recursiva pela esquerda para encontrar o número
- else if(num < no_raiz->valor){
- no_raiz->direita = buscar_numero(no_raiz->esquerda, num);
- }
- else{
- //Encontrou o número
- printf("Número encontrado!\n");
- system("pause");
- menu();
- }
- }
- }
- }
- /* ====================================
- Função mostrar em ordem
- =====================================*/
- void em_ordem(struct No* no_raiz){
- //Esquerda Raiz Direita
- if(no_raiz!=NULL){
- em_ordem(no_raiz->esquerda);
- printf("%d ", no_raiz->valor);
- em_ordem(no_raiz->direita);
- }
- }
- /* ====================================
- Função mostrar em pré-ordem
- =====================================*/
- void pre_ordem(struct No* no_raiz){
- //Raiz Esquerda Direita
- if(no_raiz!=NULL){
- printf("%d ", no_raiz->valor);
- pre_ordem(no_raiz->esquerda);
- pre_ordem(no_raiz->direita);
- }
- }
- /* ====================================
- Função mostrar em pós-ordem
- =====================================*/
- void pos_ordem(struct No* no_raiz){
- //Esquerda Direita Raiz
- if(no_raiz!=NULL){
- pos_ordem(no_raiz->esquerda);
- pos_ordem(no_raiz->direita);
- printf("%d ", no_raiz->valor);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement