GUJ Discussões   :   últimos tópicos   |   categorias   |   GUJ Respostas

Bom dia, se der olha para mim , fazendo favor se as funções de máximo e minimos estão corretas ?

programação
Tags: #<Tag:0x00007f4a3591f448>

#1
#include <stdio.h>
#include <stdlib.h>
#include<string.h>

struct no
{
    char chave[20];
    struct no *pai;
    struct no *esquerda;
    struct no *direita;
};

typedef struct no No;

No *raiz;

No *criar_no(char c[])
{
    No* novo = (No*) malloc(sizeof(No) );
    strcpy(novo->chave, c);
    novo->pai = NULL;
    novo->esquerda = NULL;
    novo->direita = NULL;
    return novo;
}

void inserir(char dado[])
{
    No *novo = criar_no(dado);

    No *y = NULL;
    No *x = raiz;

    if(raiz == NULL)
    {
        printf("%s inserido na raiz\n", novo->chave);
        raiz = novo;
    }
    else
    {
        while(x != NULL)
        {
            y = x;
            if(strcmp(novo->chave,x->chave)<0)
                x = x->esquerda;

            else if(strcmp(novo->chave,x->chave)>0)
                x = x->direita;
        }
        if(strcmp(novo->chave, y->chave)<0)
        {
            printf("%s inserido a esquerda de %s\n", novo->chave, y->chave);
            y->esquerda = novo;
            novo->pai = y;
        }
        else if(strcmp(novo->chave, y->chave)>0)
        {
            printf("%s inserido a direita de %s\n", novo->chave, y->chave);
            y->direita= novo;
            novo->pai = y;
        }
    }

}


void em_order(No*raiz)
{
    if(raiz!=NULL)
    {
        em_order(raiz->esquerda);
        printf("%s",raiz->chave);
        em_order(raiz->direita);
    }
}

No*busca(No*raiz,char k[])
{
    if(raiz==NULL ||strcmp(raiz->chave,k)==0)
    {
        return raiz;
    }
    if(strcmp(k,raiz->chave)<0)
    {
        return busca(raiz->esquerda,k);
    }
    else
    {
        return busca(raiz->direita,k);
    }
}


void min(No*raiz)
{
    while(raiz->esquerda!=NULL)
    {
        raiz=raiz->esquerda;
        return raiz;
    }
}
void max(No*raiz)
{
    while(raiz->direita!=NULL)
    {
        raiz=raiz->direita;
        return raiz;
    }
}

int main()
{
    raiz = NULL;

    char dado[20];

    strcpy(dado,"c");
    inserir(dado);
    strcpy(dado,"a");
    inserir(dado);
    strcpy(dado,"b");
    inserir(dado);
    strcpy(dado,"coisa");
    //strcpy(dado,"c");
    //inserir(raiz, dado);insere mais dados

    No*no=(busca(raiz,dado));
    {
        if(no==NULL)
        {
            printf("\nNao achou");
        }
        else
        {
            printf("\n Achou");
        }

    }



    return 0;
}

https://pastebin.com/DfUMghMH


#2

Executa e testa de acordo com o que foi pedido, assim vai saber se está certo.


#3

Bom dia , se manja de C também e de árvore binária ?