From 5af178a01dc0e2c13a5b9b1afa06f970320062ac Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matt=C3=A9o=20Delabre=20=E2=9C=8F?= Date: Sun, 20 Nov 2016 16:30:23 +0100 Subject: [PATCH] =?UTF-8?q?G=C3=A8re=20les=20textes=20d'entr=C3=A9e=20n'ay?= =?UTF-8?q?ant=20qu'un=20seul=20type=20de=20caract=C3=A8re?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/huftree.c | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/src/huftree.c b/src/huftree.c index 6bb05f9..e877ca3 100644 --- a/src/huftree.c +++ b/src/huftree.c @@ -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; + } } }