Fini tree node et frequency table

This commit is contained in:
AlgaLaptop
2025-12-18 00:19:25 +01:00
parent 9050ea4036
commit a125146bd0
3 changed files with 244 additions and 61 deletions
+107 -30
View File
@@ -1,40 +1,117 @@
public class HuffmanNode{
private char value;
private int frequence;
/**
* 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 {
private HuffmanNode left;
private HuffmanNode right;
/** 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;
/** Fréquence du symbole (somme des fréquences des enfants). */
private int frequence;
/** Fils gauche du nœud (null si feuille). */
private HuffmanNode left;
public HuffmanNode(char v,int f){
this.value = v;
this.frequence = f;
this.right = null;
this.left = null;
}
/** Fils droit du nœud (null si feuille). */
private HuffmanNode right;
/**
* 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;
}
public void setSonLeft(HuffmanNode lef){
this.left = lef;
}
/**
* 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;
}
public void setSonRight(HuffmanNode rig){
this.right = rig;
}
/**
* 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;
}
public boolean isLead(HuffmanNode f){
// on est une feuille si on a pas de fils gauche et ni de fils droit !
boolean b = true;
/**
* Retourne la fréquence du nœud.
*
* @return la fréquence
*/
public int getFrequence() {
return this.frequence;
}
if(this.left == null && this.right == null){
b = true;
}else{
b = false;
/**
* 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.");
}
return b;
}
// ajouter d'autres méthode tel que les getters par exemple !!!
}
return this.value;
}
}