Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- #include <malloc.h>
- struct no {
- char nome[30];
- struct no *direita;
- struct no *esquerda;
- };
- struct no *raiz; //Ponteiro da raiz
- struct no *alocar; //Ponteiro para fazer alocação
- struct no * buscar(char *nome) {
- struct no *ponteiro;
- ponteiro = raiz;
- while (ponteiro) {
- if (strcmp(nome, ponteiro->nome)==0) //Faz a comparação de strings
- return ponteiro; //Retorna ponteiro se o encontrar
- if (strcmp(nome, ponteiro->nome)>0)
- ponteiro = ponteiro->direita;
- else
- ponteiro = ponteiro->esquerda;
- }
- return NULL; //Retorna o ponteiro nulo
- }
- void inserir(char *nome) {
- alocar = (struct no *) malloc(sizeof(struct no)); //Faz alocação na memória
- if (!alocar) { //Se não for possível a alocação, sai do programa
- printf("Falta de memória");
- exit(0);
- }
- strcpy(alocar->nome, nome); //Copia o nome para o novo nó alocado
- if (!raiz) { //Se não houver elemento ainda na árvore, insere na raiz
- raiz = alocar;
- }
- else
- {
- //ponteiros para busca
- struct no *ponteiro;
- struct no *ponteiroAnterior;
- ponteiro = raiz; //ponteiro inicia na raiz
- ponteiroAnterior = NULL; //anterior inicial em NULL
- while (ponteiro) { //Faz a busca do lugar ao qual deve ser inserido o nó
- ponteiroAnterior = ponteiro;
- if (strcmp(nome, ponteiro->nome)==0) {
- printf("\nnome inserido já existe!");
- return;
- }
- if (strcmp(nome, ponteiro->nome)>0){
- ponteiro = ponteiro->direita;
- }
- else {
- ponteiro = ponteiro->esquerda;
- }
- }
- if (strcmp(nome, ponteiroAnterior->nome)>0) {
- ponteiroAnterior->direita = alocar;
- //atribui o endereço de alocação ao ponteiro da direita do nó anterior
- }
- else {
- ponteiroAnterior->esquerda = alocar;
- //atribui o endereço de alocação ao ponteiro da esquerda do nó anterior
- }
- }
- }
- /*Faz o caminhamento em ordem recursivamente*/
- void caminharEmOrdem(struct no *ponteiro) {
- if (ponteiro) {
- caminharEmOrdem(ponteiro->esquerda);
- printf("\n%s", ponteiro->nome);
- caminharEmOrdem(ponteiro->direita);
- }
- }
- int main() {
- FILE *arq;
- char nome[30];
- scanf("%s",&nome);
- arq = fopen(nome,"r");
- if(arq == NULL){
- exit(0);
- }
- else{
- int cont=0;
- char palavra[50];
- FILE * arq;
- scanf("%s", nome);
- arq = fopen(nome, "r");
- while (!feof(arq)) {
- fscanf(arq ,"%s", palavra);
- inserir(palavra);
- }
- }
- caminharEmOrdem(raiz);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement