1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93
| public class ArbreBinaire {
public static void main(String[] args) {
Noeud<Integer> racine = new Noeud<Integer>(5);
Noeud<Integer> feuille1 = new Noeud<Integer>(1);
Noeud<Integer> feuille2 = new Noeud<Integer>(2);
Noeud <Integer>feuille3 = new Noeud<Integer>(7);
racine.setFilsGauche(feuille2);
feuille2.setFilsGauche(feuille1);
racine.setFilsDroit(feuille3);
//System.out.println("Arbre : " + racine.toString());
System.out.println("Trouver 7 ? : " + racine.trouver(7));
System.out.println("Trouver 6 ? : " + racine.trouver(6));
}
private static class Noeud<N extends Comparable<N>> {
private Noeud<N> fg;
private Noeud<N> fd;
private N val;
public Noeud () {
}
public Noeud (N val){
this.val = val;
}
public Noeud (N val, Noeud<N> fg, Noeud<N> fd){
this(val);
this.fg = fg;
this.fd = fd;
}
public N getValeur(){
return val;
}
public Noeud<N> getFilsGauche(){
return fg;
}
public Noeud<N> getFilsDroit(){
return fd;
}
public void setFilsGauche(Noeud<N> fg){
this.fg = fg;
}
public void setFilsDroit(Noeud<N> fd){
this.fd =fd;
}
public String toString(){
StringBuilder builder = new StringBuilder();
toString(builder, this);
return builder.toString();
}
private static void toString(StringBuilder builder, Noeud noeud){
if(noeud ==null){
builder.append(".");
}else{
builder.append("(");
builder.append(noeud.val);
builder.append(" ");
toString(builder, noeud.fg);
builder.append(" ");
toString(builder, noeud.fd);
builder.append(")");
}
}
//complètement réécrite
public Noeud<N> trouver(N val) {
Noeud<N> courant = this;
while(courant != null){
if(val.compareTo(courant.getValeur())<0){
return courant.getFilsGauche();
}else if (val.compareTo(courant.getValeur())>0){
return courant.getFilsDroit();
}else{
return courant;
}
}
return null;
}
}
} |
Partager