IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Composants Java Discussion :

[JTree]recherche dans un arbre (non binaire ?)


Sujet :

Composants Java

  1. #1
    Membre averti Avatar de biozaxx
    Profil pro
    Inscrit en
    Août 2004
    Messages
    403
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 403
    Points : 375
    Points
    375
    Par défaut [JTree]recherche dans un arbre (non binaire ?)
    salut,

    je poste ici car j'utilise un JTree pour afficher ma hierarchie mais c'est plus un probleme d'algorithme que je rencontre ...

    j'ai un JTree , sans model associé , une string et je souhaite recuperer les path des noeud/feuille correspondant a cette string (un element peut se retrouver à plusieurs endroit dans l'arbre).
    Note : je ne pense pas que mon arbre soit binaire puisqu'un noeud peut avoir plus de 2 fils...

    donc si quelqu'un connait un petit algo qui parcourt un arbre non binaire je veux bien une description de celui-ci , ou un lien

    merci pour votre aide

  2. #2
    Expert éminent sénior
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Points : 12 977
    Points
    12 977
    Par défaut
    ba un bon vieux backtracking des familles, c'est bourrin mais ça marche, et puis comme un JTree ne possède pas une profondeur monstrueuse, ça peut être jouable

    aller cadeau il est tout chaud

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
     
     
    import java.util.ArrayList;
     
    import javax.swing.JTree;
    import javax.swing.tree.DefaultMutableTreeNode;
    import javax.swing.tree.DefaultTreeModel;
    import javax.swing.tree.TreeNode;
     
    public class TestTree extends JTree {
     
    	public void backtrack(DefaultMutableTreeNode n,Object toFind, ArrayList<TreeNode[]> paths){
     
    		//Si on a l'égalité entre ce que l'on cherche et la valeur du noeud, on remplit le chemin depuis la racine 
    		if(n.getUserObject().equals(toFind)) {
    			paths.add(n.getPath());
    		}
     
    		//Sinon on relance la récursivité sur les noeuds enfants
    		for(int i = 0; i<n.getChildCount(); i++) {
    			DefaultMutableTreeNode child = (DefaultMutableTreeNode) n.getChildAt(i);
    			backtrack(child, toFind, paths);			
     
    		}
    	}
    	/**
             * @param args
             */
    	public static void main(String[] args) {
    		// TODO Auto-generated method stub
     
    		//tu construit ton arbre comme tu l'entends.
    		DefaultMutableTreeNode root = new DefaultMutableTreeNode("racine");
    		DefaultMutableTreeNode toto1 = new DefaultMutableTreeNode("toto1");
    		DefaultMutableTreeNode toto2 = new DefaultMutableTreeNode("toto2");
    		DefaultMutableTreeNode toto3 = new DefaultMutableTreeNode("toto3");
    		DefaultMutableTreeNode toto4 = new DefaultMutableTreeNode("toto4");
    		DefaultMutableTreeNode toto5 = new DefaultMutableTreeNode("toto5");
    		toto1.add(toto2);
    		toto2.add(toto3);
    		toto1.add(toto4);
    		toto1.add(toto5);
    		root.add(toto1);
    		DefaultTreeModel m = new DefaultTreeModel(root);
    		TestTree t = new TestTree();
    		t.setModel(m);
     
     
                    //tu récupères la racine de ton arbre
    		DefaultMutableTreeNode racine = (DefaultMutableTreeNode) t.getModel().getRoot();
                    //tu  initialise ta liste
    		ArrayList<TreeNode[]> l = new ArrayList<TreeNode[]>();
                    //tu lance le backtrack
    		t.backtrack(racine, "toto4", l);
                    //et voilou
    		System.out.println("taille liste = "+ l.size());
    		for (int i = 0; i<l.size(); i++) {
    			TreeNode[] tmp = l.get(i);
    			for(int j = 0; j<tmp.length; j++) {
    				System.out.println(tmp[j].toString());
    			}
    		}
     
     
    	}
     
    }
    Bon d'accord c'est même pas du backtracking mais juste du récursif, il n'y a pas de dnotion de jouer/ déjouer un coup ni d'évaluation statique de la situation

    ++
    Hey, this is mine. That's mine. All this is mine. I'm claiming all this as mine. Except that bit. I don't want that bit. But all the rest of this is mine. Hey, this has been a really good day. I've eaten five times, I've slept six times, and I've made a lot of things mine. Tomorrow, I'm gonna see if I can't have sex with something.

  3. #3
    Membre averti Avatar de biozaxx
    Profil pro
    Inscrit en
    Août 2004
    Messages
    403
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 403
    Points : 375
    Points
    375
    Par défaut
    mmmm, ca a l'air bien ca

    merci beaucoup, je l'essai de ce pas

    @+

  4. #4
    Candidat au Club
    Femme Profil pro
    Chercheur en informatique
    Inscrit en
    Mai 2013
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2013
    Messages : 12
    Points : 4
    Points
    4
    Par défaut koukou
    Bonjour,

    je voulais implémenter en java un intree, je pense à la structure arbre mais je ne sais pas comment utiliser.

    merci d'avance

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. hauteur arbre non binaire, ou placer le return
    Par Acidmaster dans le forum Algorithmes et structures de données
    Réponses: 2
    Dernier message: 31/01/2009, 20h10
  2. [Flex] Composant de recherche dans un arbre
    Par eXiaNazaire dans le forum Flex
    Réponses: 2
    Dernier message: 13/08/2007, 16h51
  3. Recherche dans un arbre généalogique en C++
    Par alcachofa dans le forum C++
    Réponses: 2
    Dernier message: 26/11/2006, 12h46
  4. Recherche dans un arbre-n-aires en C
    Par NThierry dans le forum C
    Réponses: 3
    Dernier message: 22/08/2006, 21h07
  5. Recherche dans une liste non trié
    Par Oberown dans le forum Algorithmes et structures de données
    Réponses: 7
    Dernier message: 13/09/2004, 13h56

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo