rendered paste body/* Helton Fernandes da Rosa EP3 - Estrutura de Dados */#include <stdio.h>#include <stdlib.h>#include <string.h>typedef struct node{ int freq; int num; char *seq; node *esq, *dir, *pai;}; void InsereABB(node* no, node *root, bool h){ if(root == NULL) { // AKI ELE ATRIBUIU MAS PERDEU QDO SAI DA FUNÇAÕ.... //////////////////////////////////////////////////////// printf("\n root1: %p no: %p",root, no); root = no; printf("\n root2: %p",root); printf("\n %s - 1,", root->seq); ///////////////////////////////////////////////////////// } else { if(strcmp(no->seq,root->seq) == 0) { root->freq++; printf("\n %s - 2,", root->seq); free(no->seq); free(no); } else { if(strcmp(no->seq,root->seq)>0) { if(root->dir) InsereABB(no, root->dir, &h); else { root->dir = no; printf("\n %s,-3", root->seq); } } else { if(root->esq) InsereABB(no, root->esq, &h); else { root->esq = no; printf("\n %s -4,", root->seq); } } } } }void InOrdem(node* root){ if(root) { printf(" %s,", root->seq); InOrdem(root->esq); InOrdem(root->dir); }}void Desaloca(node* root){ if(root) { Desaloca(root->esq); free(root->esq); Desaloca(root->dir); free(root->dir); }}int main (int argc, char **argv){ // AKI EU DECAREI ///////////////////////////////////////////////////////// node* root = NULL; // Raiz da árvore. ////////////////////////////////////////////////////////// FILE *arq; // Variável para abertura do arquivo. int flinha, fcoluna, wlinha, wcoluna; // Dados da imagem e da janela. int i, j, h, k; // Variáveis auxiliares. char *imagem; // Vetor que conterá a imagem lida. char tipo[3]; // Variável que conterá o tipo do pgm. int m, n, p, q, r, s; // Auxiliares de percorrimento do vetor imagem. int max_value; // Valor máximo da figura de entrada. int seq_counter; // Contador para a sequência de caracteres. char *seq_temp; // Armazena temporariamente um padrão da imagem. int temp_num; // Armazena temporariamente um padrão da imagem, transformado em um inteiro. char* temp_seq; // Sequência temporária. node* no; // Novo nó. // Testa-se se a chamada do programa está passando os parâmetros if(argc==4) { // Pego os valores da janela wlinha = atoi(argv[2]); wcoluna = atoi(argv[3]); // Abertura do arquivo de entrada arq = fopen(argv[1], "r"); if(arq) { // Leio o cabeçalho do arquivo. fscanf(arq, "%s", &tipo); fscanf(arq, "%d", &fcoluna); fscanf(arq, "%d", &flinha); fscanf(arq, "%d", &max_value); // Aloco o vetor que conterá a imagem de entrada. if(flinha != 0 && fcoluna!= 0) { // Aloco as mastrizes e a fila imagem = (char*)malloc(sizeof(char)*flinha*fcoluna+1); // Faz-se a leitura da imaem para um vetor. for(i=0; i<flinha; i++) { for(j=0; j<fcoluna ; j++) { fscanf(arq, "%s", imagem + i*fcoluna + j); } } // Construo os padrões p = wlinha; q = wcoluna; m = flinha; n = fcoluna; for(i=0 ; i <= (m-p); i++) { for( j=0; j <= (n-q); j++) { seq_counter=0; seq_temp = (char*)malloc((p*q)+1); for(h=0; h < wlinha; h++) { for(k=0; k < wcoluna; k++) { // Escreve o caracter corrente. seq_temp[seq_counter++] = imagem[(i+h)*fcoluna + (j+k)]; } } seq_temp[seq_counter] = '\0'; no = (node*)malloc(sizeof(node)); no->esq = no->dir = no->pai= NULL; no->seq = seq_temp; no->freq = 1; // AKI EU CHAMEI A FUNÇÃO ////////////////////////////////////////////// InsereABB(no, root, true); /////////////////////////////////////////////// } } } else printf(" Linha e/ou coluna vazia(s)"); } else printf("Erro na abertura do arquivo. Verifique o nome do arquivo."); } else printf("Sintaxe: ep3 nome_arquivo p q"); InOrdem(root); Desaloca(root); free(root); scanf("%d",&i); return 1;}