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