TADS:Estrutura de Dados: codigos1502

De Wiki Cursos IFPR Foz
Revisão de 20h28min de 15 de fevereiro de 2016 por Estevan.costa (discussão | contribs) (Criou página com '<syntaxhighlight lang="c"> #include<stdio.h> #include<stdlib.h> typedef struct No{ int dado; struct No *esquerdo; struct No *direito; } No; void inordem(No *elem...')
(dif) ← Edição anterior | Revisão atual (dif) | Versão posterior → (dif)
Ir para navegaçãoIr para pesquisar
#include<stdio.h>
#include<stdlib.h>

typedef struct No{
    int dado;
    struct No *esquerdo;
    struct No *direito;
} No;

void inordem(No *elemento);
void inserirelemento(No* novo, No* elemento);
No* pesquisar(int valorprocurado, No* elemento);
No* procurapai(No *procurado, No* elemento);

void main()
{
    No *raiz = NULL;
    No *novo;
    int dado;
    int opcao;
    do
    {
        printf("1 - Inserir\n");
        printf("2 - Pesquisar\n");
        printf("3 - Mostrar\n");
        printf("0 - Sair\n");
        printf("Opcao: ");
        scanf("%d", &opcao);
        setbuf(stdin, NULL);

        switch(opcao)
        {
            case 1:
                novo = malloc(sizeof(No));
                novo->esquerdo = NULL;
                novo->direito = NULL;
                printf("Digite um valor para inserir : ");

                scanf("%d", &dado);
                novo->dado = dado;
                setbuf(stdin, NULL);

                if (raiz == NULL)
                    raiz = novo;
                else
                    inserirelemento(novo, raiz);
                break;
            case 2:
                printf("Digite um valor para inserir : ");

                scanf("%d", &dado);
                setbuf(stdin, NULL);

                novo = pesquisar(dado, raiz);
                if (novo == NULL)
                {
                    printf("Este elemento não se encontra nesta arvore!");
                }
                else
                {
                    printf("Este elemento está na arvore.\n");
                    if (novo == raiz)
                    {
                        printf("Este elemento é Raiz!\n");
                    }
                    else
                    {
                        No *pai = procurapai(novo, raiz);
                        printf("O pai deste elemento é o : %d\n", pai->dado);
                    }
                }
                break;
            case 3:
                inordem(raiz);
                break;
            case 0:
                printf("Finalizando o programa!");
                break;
        }
    }while(opcao != 0);
}

No* pesquisar(int valorprocurado, No* elemento)
{
    if(elemento == NULL)
        return NULL;
    else if(valorprocurado == elemento->dado)
        return elemento;
    else if (valorprocurado > elemento->dado)
        return pesquisar(valorprocurado, elemento->direito);
    else if (valorprocurado < elemento->dado)
        return pesquisar(valorprocurado, elemento->esquerdo);

}

void inordem(No *elemento)
{
    if(elemento != NULL)
    {
        inordem(elemento->esquerdo);
        printf("valor: %d\n", elemento->dado);
        inordem(elemento->direito);
    }
}

void inserirelemento(No *novo, No* elemento)
{
    if(novo->dado > elemento->dado)
    {
        if(elemento->direito != NULL)
            inserirelemento(novo, elemento->direito);
        else
            elemento->direito = novo;
    }
    else
    {
        if(elemento->esquerdo != NULL)
            inserirelemento(novo, elemento->esquerdo);
        else
            elemento->esquerdo = novo;
    }

}

No* procurapai(No *procurado, No* elemento)
{
    if(procurado->dado > elemento->dado )
    {
        if(procurado == elemento->direito)
            return elemento;
        else
            procurapai(procurado, elemento->direito);
    }

    else
    {
        if(procurado == elemento->esquerdo)
            return elemento;
        else
            procurapai(procurado, elemento->esquerdo);

    }
}