MàJ de display pour fonctionner avec le nouveau HufTree
This commit is contained in:
parent
9576b371ce
commit
ec235ddea7
|
@ -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
|
||||||
|
|
|
@ -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 {
|
||||||
|
|
Loading…
Reference in New Issue