#include <stdio.h>
#include <stdlib.h>
typedef struct tree
{
struct tree *left, *right;
int valor;
} treeNode;
/**
* Recebe uma estrutura e um valor
*
* Caso tenha algo na estrutura, o valor recebido e comparado com o valor da
* estrutura, e o valor é mandado para um nó a esquerda ou da direita dependendo
* se o valor recebido é maior o menor que o valor na estrutura.
*
* Caso a estrutura seja vazia, um nó é criado para conter o valor
*/
void insert(treeNode **node, int val)
{
if(*node)
{
if((*node)->valor > val) insert(&(*node)->left, val);
else if((*node)->valor < val) insert(&(*node)->right, val);
}
else
{
*node = malloc(sizeof(treeNode));
(*node)->left = NULL;
(*node)->right = NULL;
(*node)->valor = val;
}
}
/**
* Caso a estutura tenha algo, a função vai o máximo possivel a esquerda,
* imprime o valor e em seguida vai para direita
* até chegara uma estrutura vazia
*/
void printTreeSorted(treeNode *node)
{
if(node)
{
printTreeSorted(node->left);
printf("%d ", node->valor);
printTreeSorted(node->right);
}
}
int main(void) {
treeNode *tree=NULL;
int val;
while(1)
{
printf("Digite um valor ou -1 para sair: ");
scanf("%d", &val);
printf("%d\n", val); // Comentar essa linha para usar inputs de usuários
if(val == -1) break;
insert(&tree, val);
}
printf("\n\nArvore organizada:\t");
printTreeSorted(tree);
return 0;
}