MàJ de display pour fonctionner avec le nouveau HufTree

This commit is contained in:
Mattéo Delabre 2016-11-19 21:40:02 +01:00
parent 9576b371ce
commit ec235ddea7
2 changed files with 20 additions and 20 deletions

View File

@ -3,7 +3,8 @@
#include <stdlib.h> #include <stdlib.h>
typedef struct HufTree HufTree; typedef struct HufVertex HufVertex;
typedef HufVertex* HufTree;
/** /**
* Écrire des données de débogage sur la sortie d'erreurs standard * Écrire des données de débogage sur la sortie d'erreurs standard

View File

@ -8,23 +8,22 @@
#include <locale.h> #include <locale.h>
/** /**
* Détermine la profondeur de l'arbre binaire * Détermine la profondeur maximale de l'arbre de Huffman donné
* à partir du sommet donné
*/ */
static int _maxDepth(HufVertex); static int _treeDepth(HufTree);
/** /**
* Affiche l'arborescence à partir du sommet donné, * Sous-fonction pour l'affichage récursif d'un arbre de Huffman
* indenté sur le niveau donné
*/ */
static void _printVertex(HufVertex, wchar_t*, int); static void _subPrintTree(HufTree, wchar_t*, int);
/** /**
* Transforme le caractère donné en espace s'il est * Transforme le caractère donné en espace s'il est non-imprimable
* non-imprimable, ou le laisse tel quel sinon * ou le laisse tel quel sinon
*/ */
static char _safeChar(char input); static char _safeChar(char input);
// Drapeau pour l'affichage verbeux ou non-verbeux
static int is_verbose = FALSE; static int is_verbose = FALSE;
void printVerbose(const char* format, ...) { void printVerbose(const char* format, ...) {
@ -48,13 +47,13 @@ int isVerbose() {
void printTree(HufTree tree) { void printTree(HufTree tree) {
// Allocation d'un tampon suffisamment grand pour contenir // Allocation d'un tampon suffisamment grand pour contenir
// les indentations des sommets les plus profonds de l'arbre // les indentations des sommets les plus profonds de l'arbre
wchar_t* buffer = malloc(_maxDepth(*tree.root) * 4 * sizeof(*buffer)); wchar_t* buffer = malloc(_treeDepth(tree) * 4 * sizeof(*buffer));
_printVertex(*tree.root, buffer, 0); _subPrintTree(tree, buffer, 0);
free(buffer); free(buffer);
} }
void _printVertex(HufVertex vert, wchar_t* buffer, int length) { void _subPrintTree(HufTree tree, wchar_t* buffer, int length) {
if (vert.child_l != NULL && vert.child_r != NULL) { if (tree->child_l != NULL && tree->child_r != NULL) {
// Affichage d'un sommet avec enfants, on montre // Affichage d'un sommet avec enfants, on montre
// la probabilité somme des enfants // la probabilité somme des enfants
printVerbose("\n"); printVerbose("\n");
@ -69,7 +68,7 @@ void _printVertex(HufVertex vert, wchar_t* buffer, int length) {
buffer[length + 2] = ' '; buffer[length + 2] = ' ';
buffer[length + 3] = ' '; buffer[length + 3] = ' ';
buffer[length + 4] = '\0'; buffer[length + 4] = '\0';
_printVertex(*vert.child_l, buffer, length + 4); _subPrintTree(tree->child_l, buffer, length + 4);
// Affichage du fils droite. Augmentation du préfixe // Affichage du fils droite. Augmentation du préfixe
// pour l'affichage des enfants du fils droit // pour l'affichage des enfants du fils droit
@ -77,18 +76,18 @@ void _printVertex(HufVertex vert, wchar_t* buffer, int length) {
printVerbose("%ls└── ", buffer); printVerbose("%ls└── ", buffer);
buffer[length] = ' '; buffer[length] = ' ';
_printVertex(*vert.child_r, buffer, length + 4); _subPrintTree(tree->child_r, buffer, length + 4);
} else { } else {
// Affichage d'une feuille de l'arbre, correspondant // Affichage d'une feuille de l'arbre, correspondant
// à un caractère du corpus // à un caractère du corpus
printVerbose("%c\n", _safeChar(vert.name)); printVerbose("%c\n", _safeChar(tree->name));
} }
} }
int _maxDepth(HufVertex vert) { int _treeDepth(HufTree tree) {
if (vert.child_l != NULL && vert.child_r != NULL) { if (tree->child_l != NULL && tree->child_r != NULL) {
int left = _maxDepth(*vert.child_l); int left = _treeDepth(tree->child_l);
int right = _maxDepth(*vert.child_r); int right = _treeDepth(tree->child_r);
return (left > right ? left : right) + 1; return (left > right ? left : right) + 1;
} else { } else {