Files
SAE32_2025/src/fr/iutfbleau/sae/mhuffman/HuffmanNode.java
T

118 lines
3.1 KiB
Java
Raw Normal View History

2025-12-18 00:19:25 +01:00
/**
* Représente un nœud de l'arbre de Huffman.
* <p>
* Un {@code HuffmanNode} peut être :
* <ul>
* <li>une feuille, contenant une valeur (symbole) et une fréquence</li>
* <li>un nœud interne, contenant uniquement une fréquence et deux enfants</li>
* </ul>
* </p>
*
* <p>
* Cette classe est une structure de données utilisée par {@code HuffmanTree}
* pour construire l'arbre de Huffman.
* </p>
*
* @author Algassimou Pellel Diallo
* @version 1.1
* @since 2025-12-17
*/
public class HuffmanNode {
2025-12-15 20:27:25 +01:00
2025-12-18 00:19:25 +01:00
/** 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. */
private int value;
2025-12-15 20:27:25 +01:00
2025-12-18 00:19:25 +01:00
/** Fréquence du symbole (somme des fréquences des enfants). */
private int frequence;
2025-12-15 20:27:25 +01:00
2025-12-18 00:19:25 +01:00
/** Fils gauche du nœud (null si feuille). */
private HuffmanNode left;
2025-12-15 20:27:25 +01:00
2025-12-18 00:19:25 +01:00
/** Fils droit du nœud (null si feuille). */
private HuffmanNode right;
2025-12-15 20:27:25 +01:00
2025-12-18 00:19:25 +01:00
/**
* Construit un nœud feuille de Huffman.
* <p>
* Ce constructeur est utilisé pour représenter une valeur
* issue de la table de fréquences.
* </p>
*
* @param value la valeur (symbole) représentée par ce nœud
* @param frequence la fréquence d'apparition de la valeur
*/
public HuffmanNode(int value, int frequence) {
this.value = value;
this.frequence = frequence;
this.left = null;
this.right = null;
}
2025-12-15 20:27:25 +01:00
2025-12-18 00:19:25 +01:00
/**
* Construit un nœud interne de Huffman.
* <p>
* Ce constructeur est utilisé lors de la fusion de deux nœuds
* de plus faible fréquence lors de la construction de l'arbre.
* </p>
*
* @param left le fils gauche
* @param right le fils droit
*/
public HuffmanNode(HuffmanNode left, HuffmanNode right) {
this.left = left;
this.right = right;
this.frequence = left.frequence + right.frequence;
}
2025-12-15 20:27:25 +01:00
2025-12-18 00:19:25 +01:00
/**
* Indique si ce nœud est une feuille.
*
* @return {@code true} si le nœud est une feuille, {@code false} sinon
*/
public boolean isLeaf() {
return this.left == null && this.right == null;
}
2025-12-15 20:27:25 +01:00
2025-12-18 00:19:25 +01:00
/**
* Retourne la fréquence du nœud.
*
* @return la fréquence
*/
public int getFrequence() {
return this.frequence;
}
2025-12-18 00:19:25 +01:00
/**
* Retourne le fils gauche du nœud.
*
* @return le fils gauche
*/
public HuffmanNode getLeft() {
return this.left;
}
/**
* Retourne le fils droit du nœud.
*
* @return le fils droit
*/
public HuffmanNode getRight() {
return this.right;
}
/**
* Retourne la valeur représentée par ce nœud.
* <p>
* Cette méthode n'a de sens que si le nœud est une feuille.
* </p>
*
* @return la valeur du symbole
*/
public int getValue() {
if (!this.isLeaf()) {
throw new IllegalStateException("La valeur n'est définie que pour les feuilles.");
}
2025-12-18 00:19:25 +01:00
return this.value;
}
}