Jump to content
Luciano-web

Ajuda no preenchimento de Árvore Binária de Pesquisa

Recommended Posts

Boa tarde,

Este é meu primeiro tópico aqui no fórum, estou iniciando os estudos em Árvore Binária de Pesquisa (Busca) e estou com dificuldades na inserção e impressão dos números (chaves) na tela depois de inseridos os números.
--
Alguma sugestão? é a declaração da RAIZ? é a função de inserção?
Na verdade não aparece nada quando chamo as funções de impressão, eu já "testei" a RAIZ antes de chamar a função de impressão e ela está "zerada"

--
Segue o código abaixo, se alguém tiver um "caminho" para eu seguir eu agradeço!

--

#include <stdio.h>
#include <stdlib.h>
typedef struct arvore{
int valor;
struct arvore *dir, *esq;
} arvore;
void insere(arvore *raiz, int valor){
if (raiz == NULL){
arvore *aux;
aux = malloc (sizeof (arvore));
aux->valor = valor;
aux->dir = NULL;
aux->esq = NULL;
raiz = aux;
}
else if (valor > raiz->valor)
insere (raiz->dir, valor);
else if (valor < raiz->valor)
insere (raiz->esq, valor);
else
printf ("Elemento ja existe na arvore\n");
}
void em_ordem(arvore *raiz){ // esquerda / raiz / direita
if (raiz != NULL){
em_ordem(raiz->esq);
printf("%d ", raiz->valor);
em_ordem(raiz->dir);
}
}
void pre_ordem(arvore *raiz){ // raiz / esquerda / direita
if (raiz != NULL){
printf("%d ", raiz->valor);
pre_ordem(raiz->esq);
pre_ordem(raiz->dir);
}
}
void pos_ordem(arvore *raiz){ // esquerda / direita / raiz
if (raiz != NULL){
pos_ordem(raiz->esq);
pos_ordem(raiz->dir);
printf("%d ", raiz->valor);
}
}
void main(){
arvore *raiz;
raiz = NULL;
insere(raiz, 10);
insere(raiz, 8);
insere(raiz, 12);
insere(raiz, 5);
insere(raiz, 11);
printf("\n>> IMPRESSAO\n=====================================================");
printf("\n---------------------------------------\n EM ORDEM: ");
em_ordem(raiz);
printf("\n---------------------------------------\n PRE ORDEM: ");
pre_ordem(raiz);
printf("\n---------------------------------------\n POS ORDEM: ");
pos_ordem(raiz);
printf("\n---------------------------------------\n");
}

Share this post


Link to post
Share on other sites


#include <stdio.h>

#include <stdlib.h>

 

struct arvore{

int valor;

struct arvore *dir, *esq;

};

 

arvore *insere(arvore *, int);

void em_ordem(arvore *);

void pre_ordem(arvore *);

void pos_ordem(arvore *);

 

arvore *insere(arvore *raiz, int valor){

//Preencher avo e filhos

if (raiz == (arvore *)NULL){

raiz = (arvore *)malloc (sizeof (arvore));

raiz->valor = valor;

raiz->dir = (arvore *)NULL;

raiz->esq = (arvore *)NULL;

return raiz;

}

//Preencher pais

if(raiz->esq == (arvore *)NULL){

raiz->esq = (arvore *)malloc (sizeof (arvore));

raiz->esq->valor = valor;

raiz->esq->dir = (arvore *)NULL;

raiz->esq->esq = (arvore *)NULL;

return raiz;

}

 

else if(raiz->dir == (arvore *)NULL){

raiz->dir = (arvore *)malloc (sizeof (arvore));

raiz->dir->valor = valor;

raiz->dir->dir = (arvore *)NULL;

raiz->dir->esq = (arvore *)NULL;

return raiz;

}

//Filhos

if (valor > raiz->esq->valor)

insere (raiz->dir, valor);

else if (valor < raiz->dir->valor)

insere (raiz->esq, valor);

else

printf ("Elemento ja existe na arvore\n");

return raiz;

}

 

void em_ordem(arvore *raiz){ // esquerda / raiz / direita

if (raiz != NULL){

em_ordem(raiz->esq);

printf("%d ", raiz->valor);

em_ordem(raiz->dir);

}

}

 

void pre_ordem(arvore *raiz){ // raiz / esquerda / direita

if (raiz != (arvore *)NULL){

printf("%d\n", raiz->valor);

if(raiz->esq != (arvore *)NULL){

printf("(esq de %d):",raiz->valor);

pre_ordem(raiz->esq);

}

if(raiz->dir != (arvore *)NULL){

printf("(dir de %d):",raiz->valor);

pre_ordem(raiz->dir);

}

}

}

 

void pos_ordem(arvore *raiz){ // esquerda / direita / raiz

if (raiz != NULL){

pos_ordem(raiz->esq);

pos_ordem(raiz->dir);

printf("%d ", raiz->valor);

}

}

 

int main(){

arvore *raiz = (arvore *)NULL;

 

raiz = insere(raiz, 10);

raiz = insere(raiz, 8);

raiz = insere(raiz, 12);

raiz = insere(raiz, 5);

raiz = insere(raiz, 11);

 

 

printf("\n>> IMPRESSAO\n=====================================================");

printf("\n---------------------------------------\n EM ORDEM:\n");

em_ordem(raiz);

printf("\n---------------------------------------\n PRE ORDEM:\n");

pre_ordem(raiz);

printf("\n---------------------------------------\n POS ORDEM:\n");

pos_ordem(raiz);

printf("\n---------------------------------------\n");

return 0;

}

 

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Similar Content

    • By Tadeu Neto
      Boa tarde, estou tentando criar uma pesquisa no mongo em que ao digitar uma palavra ele pesquise tanto por palavras acentuadas quanto sem ex: água, agua, café, cafe, cafee, joão, joao e assim vai. 
       
      Já vi algumas coisas mais não consegui ter o resultado necessário, pode ser por minha falta de experiência.
       
      Obrigado pela ajuda.
    • By Santos_2015
      Aalera como faço um busca um valor na propriedade data do Jquery através de um input? tipo mostrar a div de acordo com busca e ocultar as outras.
       
      <div data-value="A" class="valor">AA</div> <div data-value="B" class="valor">BB</div> <div data-value="C" class="valor">CC</div>  
      Ex: Mostrar as div que contenham A e ocultar as restantes.
    • By raPPa
      Olá preciso fazer uma busca heurística, onde a ideia é pegar o primeiro menor valor e comparar com o próximo valor, se o proximo for maior que o valor atual ele pega esse valor como o menor.
       
      No exemplo abaixo, o valor mais baixo que ele deveria encontrar seria o "-4" pois o -4 é menor que o -2 e o proximo valor de -4 é o 0 que é maior que -4, seria isso... Alguma ideia?
       
      http://i64.tinypic.com/x2rw3q.png
      https://www.clubedohardware.com.br/uploads/monthly_2019_04/ed222.png.199206a64b431f25b1f7e63f6eaa341f.png
       
       
      #include<stdlib.h> #include<stdio.h> int main(void){ int i,j; int matriz[20][20]; int ponto=0, pontoAnt=0, pontoProx=0; int maior=0,menor=0; int a=0,b=0,c=0,d=0; int linha=20; //zerando valores na matriz for(i=0;i<20;i++){ for(j=0;j<20;j++){ matriz[i][j]=0; } } //gerar valores 1 baixo for(i=0;i<2;i++){ for(j=13;j<15;j++){ matriz[i][j]=-2; } } //gerar valores 1 alto for(i=1;i<6;i++){ for(j=8;j<13;j++){ matriz[i][j]=3; } } for(i=2;i<5;i++){ for(j=9;j<12;j++){ matriz[i][j]=6; } } //gerar valores 2 baixo for(i=5;i<10;i++){ for(j=0;j<5;j++){ matriz[i][j]=-2; } } for(i=6;i<9;i++){ for(j=1;j<4;j++){ matriz[i][j]=-4; } } //gerar valores 2 alto for(i=5;i<11;i++){ for(j=14;j<20;j++){ matriz[i][j]=2; } } for(i=6;i<10;i++){ for(j=15;j<19;j++){ matriz[i][j]=4; } } for(i=7;i<9;i++){ for(j=16;j<18;j++){ matriz[i][j]=8; } } //gerar valores 3 baixo for(i=10;i<15;i++){ for(j=5;j<10;j++){ matriz[i][j]=-1; } } for(i=11;i<14;i++){ for(j=6;j<9;j++){ matriz[i][j]=-5; } } //gerar valores 4 baixo for(i=13;i<20;i++){ for(j=14;j<20;j++){ matriz[i][j]=-1; } } for(i=14;i<19;i++){ for(j=15;j<19;j++){ matriz[i][j]=-3; } } for(i=15;i<18;i++){ for(j=16;j<18;j++){ matriz[i][j]=-6; } } //valores da matriz principais matriz[0][14]=-4; matriz[3][10]=8; matriz[7][2]=-8; matriz[7][17]=9; matriz[12][7]=-7; matriz[16][16]=-9; matriz[18][4]=3; //mostrar matriz for(i=0;i<20;i++){ for(j=0;j<20;j++){ if(matriz[i][j] < 0){ printf("%d ",matriz[i][j]); }else{ printf(" %d ",matriz[i][j]); } } printf("\\n"); } printf("\\n-----------------------------------------------------------"); //busca heuristica for(i=0;i<20;i++){ for(j=0;j<20;j++){ if (i == 0 && j == 0){ menor=matriz[0][0]; maior=matriz[0][0]; } if(maior<matriz[i][j]){ maior=matriz[i][j]; if(ponto < pontoAnt && ponto < pontoProx){ ponto=maior; pontoAnt=matriz[i][j]; pontoProx=matriz[i][j]; } a=i+1; //valor coluna b=j+1; //valor linha } if(menor>matriz[i][j]){ menor=matriz[i][j]; c=i+1; //valor coluna d=j+1; //valor linha } } } printf("\\n\\n* Busca Heuristica"); printf("\\n-> Valor mais baixo: (%d) -> Coluna: [%d], Linha: [%d] -> Passos: {%d}",ponto,c,d); return 0; }  
    • By gramosiri2
      Olá preciso fazer uma busca heurística, onde a ideia é pegar o primeiro menor valor e comparar com o próximo valor, se o proximo for maior que o valor atual ele pega esse valor como o menor.
       
      No exemplo abaixo, o valor mais baixo que ele deveria encontrar seria o "-4" pois o -4 é menor que o -2 e o proximo valor de -4 é o 0 que é maior que -4, seria isso... Alguma ideia?
       
      http://i64.tinypic.com/x2rw3q.png

       
      #include<stdlib.h> #include<stdio.h> int main(void){ int i,j; int matriz[20][20]; int ponto=0, pontoAnt=0, pontoProx=0; int maior=0,menor=0; int a=0,b=0,c=0,d=0; int linha=20; //zerando valores na matriz for(i=0;i<20;i++){ for(j=0;j<20;j++){ matriz[i][j]=0; } } //gerar valores 1 baixo for(i=0;i<2;i++){ for(j=13;j<15;j++){ matriz[i][j]=-2; } } //gerar valores 1 alto for(i=1;i<6;i++){ for(j=8;j<13;j++){ matriz[i][j]=3; } } for(i=2;i<5;i++){ for(j=9;j<12;j++){ matriz[i][j]=6; } } //gerar valores 2 baixo for(i=5;i<10;i++){ for(j=0;j<5;j++){ matriz[i][j]=-2; } } for(i=6;i<9;i++){ for(j=1;j<4;j++){ matriz[i][j]=-4; } } //gerar valores 2 alto for(i=5;i<11;i++){ for(j=14;j<20;j++){ matriz[i][j]=2; } } for(i=6;i<10;i++){ for(j=15;j<19;j++){ matriz[i][j]=4; } } for(i=7;i<9;i++){ for(j=16;j<18;j++){ matriz[i][j]=8; } } //gerar valores 3 baixo for(i=10;i<15;i++){ for(j=5;j<10;j++){ matriz[i][j]=-1; } } for(i=11;i<14;i++){ for(j=6;j<9;j++){ matriz[i][j]=-5; } } //gerar valores 4 baixo for(i=13;i<20;i++){ for(j=14;j<20;j++){ matriz[i][j]=-1; } } for(i=14;i<19;i++){ for(j=15;j<19;j++){ matriz[i][j]=-3; } } for(i=15;i<18;i++){ for(j=16;j<18;j++){ matriz[i][j]=-6; } } //valores da matriz principais matriz[0][14]=-4; matriz[3][10]=8; matriz[7][2]=-8; matriz[7][17]=9; matriz[12][7]=-7; matriz[16][16]=-9; matriz[18][4]=3; //mostrar matriz for(i=0;i<20;i++){ for(j=0;j<20;j++){ if(matriz[i][j] < 0){ printf("%d ",matriz[i][j]); }else{ printf(" %d ",matriz[i][j]); } } printf("\\n"); } printf("\\n-----------------------------------------------------------"); //busca heuristica for(i=0;i<20;i++){ for(j=0;j<20;j++){ if (i == 0 && j == 0){ menor=matriz[0][0]; maior=matriz[0][0]; } if(maior<matriz[i][j]){ maior=matriz[i][j]; if(ponto < pontoAnt && ponto < pontoProx){ ponto=maior; pontoAnt=matriz[i][j]; pontoProx=matriz[i][j]; } a=i+1; //valor coluna b=j+1; //valor linha } if(menor>matriz[i][j]){ menor=matriz[i][j]; c=i+1; //valor coluna d=j+1; //valor linha } } } printf("\\n\\n* Busca Heuristica"); printf("\\n-> Valor mais baixo: (%d) -> Coluna: [%d], Linha: [%d] -> Passos: {%d}",ponto,c,d); return 0; }
    • By Juliana Mesquita
      Boa tarde gostaria de entender porque o codigo abaixo não funciona corretamente, alguem poderia me informar ??  LINK para por para rodar : https://repl.it/@JulianaMaria/Questao-1
       
      /* Escrever um Pseudocódigo de inserção em uma lista encadeada ordenada. */ #include <stdio.h> #include <stdlib.h> typedef struct Dados { int numero; struct Dados * proximo; }No; void imprime (No * lista){ printf("\n Lista = "); while(lista->proximo != NULL){ printf(" %d ",lista->numero); lista = lista->proximo; } printf("\n"); } No * inserir_ordenado(int valor, No * inicio_lista){ No * percorrer_lista, * novo_no, *l; percorrer_lista = (No*)malloc(sizeof(No)); novo_no = (No*)malloc(sizeof(No)); percorrer_lista = inicio_lista; novo_no->numero = valor; int cont = 0; while((percorrer_lista->numero < valor)&&(percorrer_lista->proximo != NULL)){ percorrer_lista = percorrer_lista->proximo; cont++; } //inserir fim if((percorrer_lista->proximo == NULL)&&(cont != 0)){ percorrer_lista->proximo = novo_no; novo_no->proximo = NULL; }else{ //inserir inicio if(cont == 0){ novo_no->proximo = percorrer_lista; } //inserir meio else{ novo_no->proximo = percorrer_lista->proximo; percorrer_lista->proximo = novo_no; } } return inicio_lista; } int main (){ No * lista, * pt; int valor,op = 1; pt = lista; lista->numero = 10; lista->proximo = NULL; while(op == 1){ printf("\n Digite valor para inserir na lista : "); scanf("%d",&valor); lista = inserir_ordenado(valor,pt); printf("\n Deseja inserir outro valor ? [Digite 1 para sim e outro valor para nao] = "); scanf("%d",&op); } imprime(pt); }  
×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.