Java 5 implementation arbre avl

leray24na Messages postés 4 Date d'inscription lundi 23 janvier 2006 Statut Membre Dernière intervention 27 janvier 2006 - 27 janv. 2006 à 16:40
cs_neodante Messages postés 2835 Date d'inscription lundi 11 août 2003 Statut Modérateur Dernière intervention 16 décembre 2006 - 1 févr. 2006 à 08:43
Bonjour a tous,

Mon projet consiste a implementer un arbre avl comportant au minimum les fonctions d'insertion, de suppression et de recherche d'une valeur.
Apres compilation, j'ai des messages d'erreurs.
Besoin d'aide, mon projet dois etre rendu ce soir avant 24h, par mail, veille de mon examen.

Voici mon projet avec ses erreurs:


//---TreeAVL3.java





interface BinTree<T>


{


boolean estVide();


T racine();


BinTree<T> sag ();


BinTree<T> sad ();


int hauteur();


int taille();


String toString();


int pentearb();




}






class Feuille<T> implements BinTree<T>


{


public boolean estVide() {return true;}


public T racine() {throw new IllegalArgumentException("c'est une feuille"); }


public BinTree<T> sag () {throw new IllegalArgumentException("c'est une feuille"); }


public BinTree<T> sad () {throw new IllegalArgumentException("c'est une feuille"); }


public int hauteur() {return 0;}


public int taille() {return 0;}


public String toString() {return "<>";}


public int pentearb() {return 0;}


}






class Noeud<T> implements BinTree<T>


{


protected T root;


protected BinTree<T> left;


protected BinTree<T> right;


protected int equilibre;


public Noeud()


{


left=null;


right=null;


equilibre=0;


}


public Noeud(T r, BinTree<T> g, BinTree<T> d)


{


root = r;


left = g;


right = d;


equilibre=0;


}




public boolean estVide() {return false;}


public T racine() {return root;}


public BinTree<T> sag() {return left;}


public BinTree<T> sad() {return right;}




public int hauteur()


{


int g = left.hauteur();


int d = right.hauteur();


int res = (g > d ? g : d);


return 1 + res;


}




public int taille()


{


return 1 + left.taille() + right.taille();


}




public String toString()


{


return "<" + root +"," + left.toString() + "," + right.toString() + ">";


}


public int pentearb()


{


int sag = left.hauteur();


int sad = right.hauteur();


int res = (sag-sad);


return res;


}


}


interface TreeAVL<T extends Comparable<T>> extends BinTree<T>


{


TreeAVL<T> ins(T e);


TreeAVL<T> suppr(T e);


T maxiarb();


T miniarb();


boolean equilibreR();


boolean equilibreL();


}


class TreeAVLFeuille<T extends Comparable<T>> extends Feuille<T> implements TreeAVL<T>


{


public TreeAVL<T> ins(T e)


{


return new TreeAVLNoeud<T>(e, this, this);


}


public TreeAVL<T> suppr(T e)


{throw new IllegalArgumentException("Une feuille est toujours vide !"); }





public T maxiarb()


{throw new IllegalArgumentException("Une feuille n'a pas de maximum !"); }


public T miniarb()


{throw new IllegalArgumentException("Une feuille n'a pas de minimum !"); }


public T miniter()


{throw new IllegalArgumentException("Une feuille n'a pas de minimum !"); }


public boolean equilibreR() {return true;}


public boolean equilibreL() {return true;}




}


class TreeAVLNoeud<T extends Comparable<T>> extends Noeud<T> implements TreeAVL<T>


{


public TreeAVLNoeud(T r, TreeAVL<T> g, TreeAVL<T> d )


{


super(r, g, d);


}




public TreeAVL<T> ins(T e)


{


T rac = this.racine();


TreeAVL<T> l = (TreeAVL<T>) this.sag();


TreeAVL<T> r = (TreeAVL<T>) this.sad();


if (e.compareTo(rac) < 0) {return new TreeAVLNoeud<T>(rac,l.ins(e),r);}


if (e.compareTo(rac) > 0) {return new TreeAVLNoeud<T>(rac,l,r.ins(e));}


else {return this;}


}




public T maxiarb()


{


T rac = this.racine();


TreeAVL<T> d = (TreeAVL<T>) this.sad();


if (d.estVide()) return rac;


else return d.maxiarb();


}




public T miniarb()


{


T rac = this.racine();


TreeAVL<T> g = (TreeAVL<T>) this.sag();


if (g.estVide()) return rac;


else return g.miniarb();


}




public TreeAVL<T> suppr(T e)


{


T r = this.racine();


TreeAVL<T> sg = (TreeAVL<T>) this.sag();


TreeAVL<T> sd = (TreeAVL<T>) this.sad();


if ((e.compareTo(r)!=0) && sg.estVide() && sd.estVide()) {return this;}


else if (e.compareTo(r) == 0 && sg.estVide()) { return sd;}


else if (e.compareTo(r) == 0 && sd.estVide()) { return sg;}


else


{


if (e.compareTo(r) < 0) return new TreeAVLNoeud<T>(r,sg.suppr(e),sd);


else if (e.compareTo(r) > 0) return new TreeAVLNoeud<T>(r,sg,sd.suppr(e));


else


{


T valgmax = sg.maxiarb();


return new TreeAVLNoeud<T>(valgmax,sg.suppr(valgmax),sd);


}


}


}




public boolean equilibreR (TreeAVLNoeud<T> a, TreeAVLNoeud<T>b, boolean g)


{


TreeAVLNoeud a1, a2;


switch(a.equilibre)


{


case -1 : a.equilibre = 0; return false;


case0 : a.equilibre = 1; return true;


case1 :


default : a1 = a.right;


if(a1.equilibre == 1)


{


a.right =a1.left;


a1.left = a;


a.equilibre = 0;


a = a1;


}


else


{


a2 = a1.left;


a1.left = a2.right;


a2.right = a1;


a.right = a2.left;


a2.left = a;


if(a2.equilibre == 1)


a.equilibre = -1;


else a.equilibre = 0;


if(a2.equilibre == -1)


a1.equilibre = 1;


else a1.equilibre = 0;


a = a2;


}


if(b==null)


root = a;


else if(g)


b.left = a;


else b.right = a;


a.equilibre = 0;


return false;


}


}




public boolean equilibreL (TreeAVLNoeud<T> a, TreeAVLNoeud<T>b, boolean g)


{


TreeAVLNoeud a1, a2;


switch(a.equilibre)


{


case1 : a.equilibre = 0; return false;


case0 : a.equilibre = -1; return true;


case -1 :


default : a1 = a.left;


if(a1.equilibre == -1)


{


a.left =a1.right;


a1.right = a;


a.equilibre = 0;


a = a1;


}


else


{


a2 = a1.right;


a1.right = a2.left;


a2.left = a1;


a.left = a2.right;


a2.right = a;


if(a2.equilibre == -1)


a.equilibre = 1;


else a.equilibre = 0;


if(a2.equilibre == 1)


a1.equilibre = -1;


else a1.equilibre = 0;


a = a2;


}


if(b==null)


root = a;


else if(g)


b.left = a;


else b.right = a;


a.equilibre = 0;


return false;


}


}




}






public class TreeAVL3<T>


{


public static void main(String[] args)


{


TreeAVL avl = new TreeAVLFeuille();


int[] val1 = {1,6,7,2,4,3,5};


for (Integer i : val1)


{


avl = avl.ins(i);


System.out.println("" + avl.toString());


System.out.println("insertion de " + i + " =>" + "pente: " + avl.pentearb());




}


for (Integer i : val1)


{


avl = avl.suppr(i);


System.out.println("" + avl.toString());


System.out.println("suppression de " + i + " => " + "pente: " + avl.pentearb());


}


}


}


Merci a tous.

1 réponse

cs_neodante Messages postés 2835 Date d'inscription lundi 11 août 2003 Statut Modérateur Dernière intervention 16 décembre 2006 11
1 févr. 2006 à 08:43
lu,

SVP corriger mon programme, bon ouais moyen ... mais en plus tu n'indiques même pas les erreurs (compilation ? exécution ?) ...



La prochaine fois, tente de poster avec un peu plus d'infos si tu veux
que les personnes t'aident et surtout dans un délai aussi court ... ;-)



++
0
Rejoignez-nous