CristianeRibeiro Postado Novembro 2, 2010 Denunciar Share Postado Novembro 2, 2010 Galera, estou aqui fazendo um trabalho simples de Estrutura de Dados sobre árvore binária de busca...Bom, o código já tá pronto, só que está dando um erro de compilação quecom certeza é algum erro que eu deixei passar no código, só que não consigo encontrar..Quem puder me ajudar, muito obrigada!Código#include <stdio.h> #include <stdlib.h> typedef struct tipo_no{ int item; struct tipo_no *esq; struct tipo_no *dir; }TREE; void Inicializa(TREE **arvore){ *arvore = NULL; } void insere_elemento(TREE **arvore, int item){ TREE *p; p = *arvore; if(*arvore == NULL){ p = (TREE *)malloc(sizeof(TREE)); p->item = item; p->esq = NULL; p->dir = NULL; }else{ if(item < (*arvore)->item) insere_elemento(&p->esq, item); else if(item > p->item) insere_elemento(&p->dir, item); else p->item = item; } } void esvaziar(TREE **arvore){ TREE *p; p = *arvore; esvaziar(&p->esq); esvaziar(&p->dir); free(p); } int max (int a, int b){ return (a>b ? a : b); } int altura (TREE *arvore){ /* TREE *p; p = *arvore;*/ if(arvore == NULL){ return -1; } else{ return 1 + max(altura(arvore->esq), altura(arvore->dir)); } } void PreOrdem (TREE *arvore){ if(arvore != NULL){ printf (" %c", arvore->item); PreOrdem(arvore->esq); PreOrdem(arvore->dir); } } void EmOrdem(TREE *arvore){ if(arvore != NULL){ EmOrdem(arvore->esq); printf (" %c", arvore->item); EmOrdem(arvore->dir); } } void PosOrdem (TREE *arvore){ if(arvore != NULL){ PosOrdem(arvore->esq); PosOrdem(arvore->dir); printf (" %c", arvore->item); } } main() { TREE *T; Inicializa(&T); insere_elemento(&T, 98); insere_elemento(&T, 44); insere_elemento(&T, 11); insere_elemento(&T, 26); insere_elemento(&T, 41); insere_elemento(&T, 59); insere_elemento(&T, 26); insere_elemento(&T, 60); insere_elemento(&T, 71); insere_elemento(&T, 22); insere_elemento(&T, 12); insere_elemento(&T, 30); insere_elemento(&T, 32); insere_elemento(&T, 42); insere_elemento(&T, 51); printf("\nPercurso PreOrdem"); PreOrdem(T); printf("\n\nPercurso Em Ordem"); EmOrdem(T); printf("\n\nPercurso PosOrdem"); PosOrdem(T); printf("\n\nAltura da arvore: %d", altura(T)); }Desde já muito obrigada.. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Marcelo Utikawa da Fonseca Postado Novembro 2, 2010 Denunciar Share Postado Novembro 2, 2010 Finalmente estou configurando meu windows para poder programar nele...Depois posso tentar testar o seu código!Por enquanto, coloque no fórum o retorno do compilador para eu tentar ajudar... :) Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 CristianeRibeiro Postado Novembro 3, 2010 Autor Denunciar Share Postado Novembro 3, 2010 Marcelo é o seguinte, ele compila e executamas não aparece o resultado...Acho que a árvore está ficando sempre nula,o que não satisfaz a condição if(arvore != NULL), dentro das funções PreOrdem, EmOrdem e PosOrdem...Bom se você conseguir ver o que é eu agradeço muito,porque já revirei o codigo não sei quantas vezes e ainda não encontrei o erro. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Raist Postado Novembro 7, 2010 Denunciar Share Postado Novembro 7, 2010 (editado) Opa, tudo jóia ?Então, alguns erros que eu notei dando uma olhada rápida:1º - Você está considerando que o Arvore->Item seja char nas funções xxxOrdem, sendo que ele é int.2º - Esse é o seu principal erro, quando você aloca memória na função insere_elemento(), você está alocando para a variável *p, e não para a árvore. Basta mudar o código para esse:if(*arvore == NULL){ (*arvore) = (TREE *)malloc(sizeof(TREE)); (*arvore)->item = item; (*arvore)->esq = NULL; (*arvore)->dir = NULL;Vou tentar te explicar o que ocorre com esse erro.Primeiro você declara a variável *p, depois atribui o endereço de *arvore nela. Só que quando você aloca memória para *p, você simplesmente perde a referencia que tinha da variável *arvore e coloca um outro endereço para a variável *p.Isso não aconteceria se você fizesse algo assim: p->left = malloc(); pois aí sim você está dando um endereço de memória para um ponteiro que está na variável *arvore.Se houver algo de errado além disso no seu código é só dar um toque aqui que eu dou uma olhada para você, mas olhando superficialmente é só isso mesmo.[]'s Editado Novembro 7, 2010 por Raist Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
CristianeRibeiro
Galera, estou aqui fazendo um trabalho simples de Estrutura de Dados sobre árvore binária de busca...
Bom, o código já tá pronto, só que está dando um erro de compilação que
com certeza é algum erro que eu deixei passar no código, só que não consigo encontrar..
Quem puder me ajudar, muito obrigada!
Código
Desde já muito obrigada..
Link para o comentário
Compartilhar em outros sites
3 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.