import javax.swing.*; import java.awt.Graphics; /** cette classe définit un type "Arbre binaire" */ public class ArbreBinaire{ private int element; private ArbreBinaire filsGauche; private ArbreBinaire filsDroit; /* lors de la déclaration d'une variable du type ArbreBinaire, la place mémoire correspond aux différents champs est réservée, et les champs sont initialisés, à zéro pour les entiers, à null pour les références */ /** construit un arbre binaire avec l'élément e à la racine, le fils gauche g, et le fils droit d */ public ArbreBinaire(int e, ArbreBinaire g, ArbreBinaire d) { element = e; filsGauche=g; filsDroit=d; } /** la methode racine renvoie la racine de l'arbre binaire ; cette méthode ne doit être appelée que si l'arbre binaire n'est pas vide */ public int racine() { return element; } /** la methode filsGauche renvoie le sous-arbre gauche de l'arbre binaire ; cette méthode ne doit être appelée que si l'arbre binaire n'est pas vide */ public ArbreBinaire filsGauche(){ return filsGauche;} /** la methode filsDroit renvoie le sous-arbre droit de l'arbre binaire ; cette méthode ne doit être appelée que si l'arbre binaire n'est pas vide */ public ArbreBinaire filsDroit(){ return filsDroit;} private int max(int a,int b){ if (a>b) return a; else return b; } /** la methode hauteur renvoie la hauteur de l'arbre binaire ; cette méthode ne doit être appelée que si l'arbre binaire n'est pas vide */ public int hauteur(){ if (filsGauche==null && filsDroit==null) return 0; else if (filsGauche==null) return 1+filsDroit.hauteur(); else if (filsDroit==null) return 1+filsGauche.hauteur(); else return 1+max(filsGauche.hauteur(),filsDroit.hauteur()); } private void affiche1(ArbreBinaire n,int decalage){ if (n!=null){ for(int i=1;i<=decalage;i++) System.out.print(' '); System.out.println(n.racine()); affiche1(n.filsGauche,decalage+5); affiche1(n.filsDroit,decalage+5); } } /** la methode affiche affiche dans la console une représentation textuelle de l'arbre binaire ; cette méthode ne doit être appelée que si l'arbre binaire n'est pas vide */ public void affiche(){ affiche1(this,5); } /** la méthode chaine renvoie la valeur de la racine de l'arbre sous forme d'une chaine, pour affichage */ public String chaine(){ return String.valueOf(element); } /** la methode dessine ouvre une fenêtre graphique, et y dessine une représentation graphique de l'arbre binaire ; cette méthode ne doit être appelée que si l'arbre binaire n'est pas vide ; la fermeture de la fenêtre graphique ferme aussi l'application qui a appelé la méthode */ public void dessine(){ JFrame f = new JFrame("Arbre binaire"); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); f.setSize(600,600); Dessin d = new Dessin(this); f.add(d); f.setVisible(true); } }