#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;
}
Executa e testa de acordo com o que foi pedido, assim vai saber se está certo.
1 curtida
Bom dia , se manja de C também e de árvore binária ?