Quick actions

cmd+k|ctrl+k

Navigation

Languages

Tree Sort

Snippet info

Language

C

Visibility

public

Author

rodrigogons

Created

2017-09-18T00:25:00Z

Updated

2017-09-22T14:48:55Z

#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;
}
INFO