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