Olá a todos! Estou com um problema bem estranho no código, meu professor tentou me ajudar e modificou meu código fazendo o valor do Nó auxiliar ser o retorno do método e esse retorno sendo atribuído à raíz da árvore, antes eu tinha feito de outra forma, atribuindo normalmente no método de inserção...
O código parece perfeito, mas estão surgindo erros meio bizarros nas impressões de pRaiz->palavra / pRaiz->pDir->palavra / pRaiz->pEsq->palavra, ora resultados <null>, ora resultados em branco e até mesmo caractéres estranhos.
Segue o código:
#include <stdio.h>#include <stdlib.h>#include <string.h> typedef struct No{char palavra[];struct No *pEsq, *pDir; }TNo; TNo *pRaiz; TNo* Insercao(TNo *pRaiz, char novaPalavra[]); int main(void){ char exemplo1[] = "aaabbb";char exemplo2[] = "aaaaaa";char exemplo3[] = "aaaccc"; pRaiz = Insercao(pRaiz, exemplo1);pRaiz = Insercao(pRaiz, exemplo2);pRaiz = Insercao(pRaiz, exemplo3); printf("Palavra em pRaiz: %s\n", pRaiz->palavra);printf("Palavra em pRaiz->pDir: %s\n", pRaiz->pDir->palavra);printf("Palavra em pRaiz->pEsq: %s\n", pRaiz->pEsq->palavra); } TNo* Insercao(TNo *pRaiz, char novaPalavra[]){ if(pRaiz == NULL){printf("Entrou no IF\n"); TNo *novoNo = (TNo *)malloc(sizeof(TNo));strcpy(novoNo->palavra, novaPalavra); printf("novoNo->palavra dentro do IF: %s\n", novoNo->palavra); novoNo->pDir = NULL; novoNo->pEsq = NULL; printf("novoNo->palavra dentro do if: %s\n", novoNo->palavra); return novoNo; }else{ if (strcmp(pRaiz->palavra, novaPalavra) < 0) { printf("entrou no ELSE1\n"); pRaiz->pEsq = Insercao(pRaiz->pEsq, novaPalavra); return pRaiz; }else{printf("entrou no ELSE2\n"); pRaiz->pDir = Insercao(pRaiz->pDir, novaPalavra); return pRaiz;}}}
Output:
Entrou no IFnovoNo->palavra dentro do IF: aaabbbnovoNo->palavra dentro do IF apos attr.:entrou no ELSE1Entrou no IFnovoNo->palavra dentro do IF: aaaaaanovoNo->palavra dentro do IF apos attr.:entrou no ELSE2Entrou no IFnovoNo->palavra dentro do IF: aaacccnovoNo->palavra dentro do IF apos attr.:8alavra em pRaiz: ÞPalavra em pRaiz->pDir:Palavra em pRaiz->pEsq:
Como podem ver, coloquei algumas impressões para ter uma ideia do que estava acontecendo. O método de inserção é executado 3x com 3 strings exemplo.
Espero que alguém me ajude... já tentei várias coisas e não consigo prosseguir.