Exemple #1
0
/**
* Função Caminho
* @brief Função que gera a codificação de cada letra
* Funcao que recebe como parametros um no @param no, um vetor de caracteres @param str, um inteiro @param i e um caractere @param c, que sao utilizados para gerar
* a codificação dos bits relativos a cada caractere da string a ser comprimida, em que um @return int é retornado para o usuário dependendo de cada caso de verificacao
* no primeiro caso se o no for nulo retorna-se 0, o que significa que a função nao foi executada com sucesso, já se o a letra contida no nó for diferente de zero e
* a letra for igual ao caractere c o vetor de string ira receber o valor correspondente ao lado podendo ser zero para direita e um para esquerda, contudo se nenhuma
* condição foi atendida a função é chamada recursivamente até satisfazer a condição anterior, gerando assim a codificação
*/
int caminho (No* no, char* str, int i, char c)
{
    if (no == NULL)
    {
        return 0;
    }
    else if (no->letra!=0 && no->letra == c)
    {
        str[i] = no->lado;
        return 1;
    }
    else
    {
        int n = caminho(no->filhoesq, str, i+1, c);
        if (n==0)
        {
            n = caminho(no->filhodir, str, i+1, c);
            if (n==0)
            {
                return 0;
            }
            else
            {
                str[i] = no->lado;
                return 1;
            }
        }
        else
        {
            str[i] = no->lado;
            return 1;
        }
    }
}
Exemple #2
0
void LCAlista_por_caminho(Arvoreb *R, Nodo_lca *l, int n){

  Arvoreb *p;
  /* Busco a folha, e a partir dela faco o caminho ate a raiz. */
  p = ARVOREBBusca(R,n,n);
  caminho(p->pai,l);
}
Exemple #3
0
/**
* Função Construir o Codigo da Tabela
* @brief Funcao que gera o codigo que ira ser inserido na tabela para posterior uso de codificacao e decodificacao
*	Dada a entrada de uma árvore de huffman @param h e uma matriz de caracteres @param tabela[][MIN] é posivel gerar uma codificacao para ser reaproveitada posteriormente
* em uma tabela, essa tabela é gerada percorrendo-se a arvore de huffman com a função caminho (@see caminho) e atraves dela anotar a letra e o codigo correspondente a essa letra
* na matriz de caracteres
*/
void construir_tabela_codigo (Huffman* h, char tabela[][MIN])
{
    int i = 0, j = 0;
    char str[MIN];
    zerar_palavra(str);
    for (i=1; i<TOTSIM; i++)
    {
        if (h->frequencia_letras[i]>0)
        {
            caminho(h->cabeca->proximo, str, 0, (char) i);
            for (j=1; str[j]!=0; j++)
            {
                tabela[i][j-1] = str[j];
            }
            zerar_palavra(str);
        }
    }
}
Exemple #4
0
void caminho(Arvoreb *R, Nodo_lca *l){

  LCAAdiciona(l,R);
  if(R->pai != NULL) caminho(R->pai,l);
}