When compiling this code, the compiler doesn't return any warnings or errors but the code simply doesn't work.
The function inserirDado is supposed to recursively create nodes and store values on them, at node.valor, applying the conditions I set before.
void inserirDado(struct node **no, int numero)
{
if(*no == NULL) { //Se nao houver um nodo anterior, o primeiro numero se torna RAIZ.
* no = (struct node *) malloc(sizeof(struct node));
(*no)->direita = NULL;
(*no)->esquerda = NULL;
(*no)->valor = numero;
}else{ //Caso contrario, a definicao do numero, se entrara no nodo esquerdo ou direito.
if (numero < (*no)->valor) {
inserirDado(&(*no)->esquerda, numero);
}
else
{
inserirDado(&(*no)->direita, numero);
}
}
}
At emOrdem, the functions calls itself until it reaches the leaves, then it should print the values stored at node.valor :
void emOrdem(struct node *no)
{
if(no != NULL)
{
emOrdem(no->esquerda);
printf("%i", no->valor);
emOrdem(no->direita);
}
}
The complete code is:
#include <stdio.h>
#include <stdlib.h>
struct node
{
int valor;
struct node *esquerda;
struct node *direita;
};
void inserirDado(struct node **no, int numero);
void emOrdem(struct node *no);
int main(void) {
struct node **arvore1;
inserirDado(arvore1, 4);
inserirDado(arvore1, 2);
inserirDado(arvore1, 3);
inserirDado(arvore1, 10);
emOrdem(*arvore1);
}
//Funcao de colocar um numero aleatoria dentro de um Node.
//Ao fazer isso com varios numeros, serao criados nodos com descendentes.
void inserirDado(struct node **no, int numero)
{
if(*no == NULL) { //Se nao houver um nodo anterior, o primeiro numero se torna RAIZ.
* no = (struct node *) malloc(sizeof(struct node));
(*no)->direita = NULL;
(*no)->esquerda = NULL;
(*no)->valor = numero;
}else{ //Caso contrario, a definicao do numero, se entrara no nodo esquerdo ou direito.
if (numero < (*no)->valor) {
inserirDado(&(*no)->esquerda, numero);
}
else
{
inserirDado(&(*no)->direita, numero);
}
}
}
void emOrdem(struct node *no)
{
if(no != NULL)
{
emOrdem(no->esquerda);
printf("%i", no->valor);
emOrdem(no->direita);
}
}