При компиляции этого кода компилятор не возвращает никаких предупреждений или ошибок, но код просто не работает.
Функция InserirDado должна рекурсивно создавать узлы и сохранять значения на них, в node.valor, применяя условия, которые я установил ранее.
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);
}
}
}
В emOrdem , функции вызывают себя, пока не достигнут листьев, затем он должен распечатать значения хранится в node.valor:
void emOrdem(struct node *no)
{
if(no != NULL)
{
emOrdem(no->esquerda);
printf("%i", no->valor);
emOrdem(no->direita);
}
}
Полный код:
#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);
}
}