finir le sprint 3

This commit is contained in:
AlgaLaptop
2026-01-04 18:05:46 +01:00
parent bceb70c052
commit 182cd2bd28
10 changed files with 163 additions and 118 deletions
+44 -10
View File
@@ -21,10 +21,14 @@ package fr.iutfbleau.sae.mhuffman;
*/
public class HuffmanNode {
/** Valeur de la composante (cette valeur est appelée symbole, voir l'histoire de huffman, tres interressant) représentée par ce nœud (si feuille). c'est la part de la composante (rouge, verte ou bleue) dans la couleur d'un pixel. */
/**
* Valeur de la composante (symbole) représentée par ce nœud (uniquement pour les feuilles).
* Représente la part de la composante (rouge, verte ou bleue) dans la couleur d'un pixel.
* Pour les nœuds internes, cette valeur vaut -1.
*/
private int value;
/** Fréquence du symbole (somme des fréquences des enfants). */
/** Fréquence du symbole (somme des fréquences des enfants pour les nœuds internes). */
private int frequence;
/** Fils gauche du nœud (null si feuille). */
@@ -40,10 +44,18 @@ public class HuffmanNode {
* issue de la table de fréquences.
* </p>
*
* @param value la valeur (symbole) représentée par ce nœud
* @param value la valeur (symbole) représentée par ce nœud (entre 0 et 255)
* @param frequence la fréquence d'apparition de la valeur
* @throws IllegalArgumentException si la valeur n'est pas entre 0 et 255
* ou si la fréquence est négative
*/
public HuffmanNode(int value, int frequence) {
if (value < 0 || value > 255) {
throw new IllegalArgumentException("La valeur doit être entre 0 et 255");
}
if (frequence < 0) {
throw new IllegalArgumentException("La fréquence ne peut pas être négative");
}
this.value = value;
this.frequence = frequence;
this.left = null;
@@ -59,8 +71,13 @@ public class HuffmanNode {
*
* @param left le fils gauche
* @param right le fils droit
* @throws IllegalArgumentException si l'un des fils est null
*/
public HuffmanNode(HuffmanNode left, HuffmanNode right) {
if (left == null || right == null) {
throw new IllegalArgumentException("Les fils ne peuvent pas être null");
}
this.value = -1; // Valeur sentinelle pour les nœuds internes
this.left = left;
this.right = right;
this.frequence = left.frequence + right.frequence;
@@ -87,7 +104,7 @@ public class HuffmanNode {
/**
* Retourne le fils gauche du nœud.
*
* @return le fils gauche
* @return le fils gauche, ou null si le nœud est une feuille
*/
public HuffmanNode getLeft() {
return this.left;
@@ -96,7 +113,7 @@ public class HuffmanNode {
/**
* Retourne le fils droit du nœud.
*
* @return le fils droit
* @return le fils droit, ou null si le nœud est une feuille
*/
public HuffmanNode getRight() {
return this.right;
@@ -108,12 +125,29 @@ public class HuffmanNode {
* Cette méthode n'a de sens que si le nœud est une feuille.
* </p>
*
* @return la valeur du symbole
* @return la valeur du symbole (entre 0 et 255)
* @throws IllegalStateException si le nœud n'est pas une feuille
*/
public int getValue() {
if (!this.isLeaf()) {
throw new IllegalStateException("La valeur n'est définie que pour les feuilles.");
}
if (!this.isLeaf()) {
throw new IllegalStateException("La valeur n'est définie que pour les feuilles.");
}
return this.value;
}
}
/**
* Retourne une représentation textuelle du nœud.
* <p>
* Utile pour le débogage et l'affichage de l'arbre.
* </p>
*
* @return une chaîne décrivant le nœud
*/
@Override
public String toString() {
if (this.isLeaf()) {
return "Feuille(valeur=" + this.value + ", freq=" + this.frequence + ")";
}
return "Noeud(freq=" + this.frequence + ")";
}
}