Gère les textes d'entrée n'ayant qu'un seul type de caractère

This commit is contained in:
Mattéo Delabre 2016-11-20 16:30:23 +01:00
parent e915bd3080
commit 5af178a01d
1 changed files with 21 additions and 1 deletions

View File

@ -101,6 +101,24 @@ HufTree createTree(bytecount* counts) {
// Cas particulier : aucun caractère dans le fichier, dans ce
// cas l'arbre est l'arbre vide
tree = NULL;
} else if (leaves_count == 1) {
// Cas particulier : un seul type de caractère dans le fichier,
// dans ce cas on crée un noeud artificiel et une racine. Sans
// cette opération, on aurait un arbre avec un unique sommet et
// donc une étiquette vide
HufTree child_l = remaining[0];
HufTree child_r = malloc(sizeof(*child_r));
tree = malloc(sizeof(*tree));
tree->value = -1;
tree->count = -1;
tree->child_l = child_l;
tree->child_r = child_r;
child_r->value = -1;
child_r->count = -1;
child_r->child_l = NULL;
child_r->child_r = NULL;
} else {
// Sinon, la racine de l'arbre est le dernier sommet encore
// dans le tableau `remaining`
@ -245,7 +263,9 @@ void _labelVertex(HufVertex vertex, char** labels, char* label, size_t length) {
} else {
// Si le sommet est une feuille, étiquetage du caractère
// associé avec l'étiquette passée en paramètre. Fin de la récursion
labels[vertex.value] = label;
if (vertex.value != -1) {
labels[vertex.value] = label;
}
}
}