Olá pessoal,
Hoje eu levantei com o pé direito e resolvi aprender uma nova linguagem, migrando do JAVA para o C.
Como já sei lógica de programação, resolvi pular a parte dos ifs, elses, int e etc para a parte que, particulamente, acho mais difícil na linguagem: os ponteirinhos :P
Então resolvi começar pela árvore binaria, que é uma estrutura simples de se fazer, ou ao menos era pra ser =/
Acontece que, ao inserir mais de um elemento que tende ao lado de um que ja foi inserido, o programa trava e não consegui encontrar o por que, ja que existem inúmeras hipóteses para o erro 0xFF no code blocks
segue abaixo o código:
Alguem ai sabe o que está acontecendo de errado?
Hoje eu levantei com o pé direito e resolvi aprender uma nova linguagem, migrando do JAVA para o C.
Como já sei lógica de programação, resolvi pular a parte dos ifs, elses, int e etc para a parte que, particulamente, acho mais difícil na linguagem: os ponteirinhos :P
Então resolvi começar pela árvore binaria, que é uma estrutura simples de se fazer, ou ao menos era pra ser =/
Acontece que, ao inserir mais de um elemento que tende ao lado de um que ja foi inserido, o programa trava e não consegui encontrar o por que, ja que existem inúmeras hipóteses para o erro 0xFF no code blocks
segue abaixo o código:
Código:
#include <stdio.h> #include <stdlib.h> #include <windows.h> #define null NULL //preguica de segura shift ;) //*************************************** // Definicao de estrutura do no //*************************************** typedef struct NODE{ int key; struct NODE *esq; struct NODE *dir; }No; //criar novo no No *newNo(int key){ //reserve memoria para o novo no No *tmp = malloc(sizeof(tmp)); //define os dados do novo no tmp->key = key; tmp->esq = null; tmp->dir = null; //retorna a posicao de memoria obtida return tmp; } //************************************** // DECLARACAO DE VARIAVEIS //************************************** No *raiz; //raiz do no //************************************** // METODOS E FUNCOES //************************************** //iniciar arvore void start(){ raiz = null; } /** Inserir elemento na arvore @param no Ponteiro atual @param ins No a ser inserido @return No inserido */ No *inserir(No *no, No *ins){ //se elemento nulo, insere if(no == null){ no = ins; //se a chave do a ser inserido menor que chave de no atual, anda pra esquerda }else if(ins->key < no->key){ no->esq = inserir(no->esq, ins); //senao anda pra direita }else{ no->dir = inserir(no->dir, ins); } return no; }//fim de inserir /** Construir novo no e chamar a funcao a ser inserida @param Chave do novo no */ void inserir0(int key){ No *toInsert = newNo(key); raiz = inserir(raiz, toInsert); }//fim de inserir /** Mostrar arvore @param no No incial da arvore */ void mostrar(No *no){ if (no != null){ mostrar(no->esq); printf("%d\n", no->key); mostrar(no->dir); } } /** Realizar a leitura de um inteiro */ int readInt(){ int resp = -1; scanf("%d",&resp); fflush(stdin); return resp; } int main(){ SetConsoleTitleA("Arvore Binaria"); int op; int value; printf("*************** Arvore Binaria em C ***************\n\n"); printf("TAREFAS:\n\n-1: Encerrar execução\n1: Inserir Elemento\n2: Mostrar Arvore\n"); printf("Opcao: "); op = readInt(); while (op != -1){ switch (op){ case 1: printf("Valor a ser inserido: "); value = readInt(); inserir0(value); printf("Executei insercao"); break; case 2: mostrar(raiz); break; default: printf("ERRO: Opcao invalida!\n"); } printf("TAREFAS:\n\n-1: Encerrar execução\n1: Inserir Elemento\n2: Mostrar Arvore\n"); printf("Opcao: "); op = readInt(); } printf("Programa encerrado!"); return 0; }
Comment