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>
typedef struct HufTree HufTree;
typedef struct HufVertex HufVertex;
typedef HufVertex* HufTree;
/**
* Écrire des données de débogage sur la sortie d'erreurs standard

View File

@ -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 {