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

W4 Express Java Discussion :

Inverser la présentation des éléments d'un arbre


Sujet :

W4 Express Java

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    avril 2013
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : avril 2013
    Messages : 93
    Points : 126
    Points
    126
    Par défaut Inverser la présentation des éléments d'un arbre
    Bonjour.

    Je suis en train de construire un arbre d'éléments.
    J'affiche sans problème l'arbre seulement j'aimerai inverser la présentation des éléments.

    Actuelement j'affiche des objets de la manière suivante :
    |-Objet
    |--Objet père
    |--Objet père
    J'aimerai afficher de la manière suivante
    |-Objet
    |--Objet fils
    |--Objet fils
    |--Objet fils
    |--Objet fils
    |--Objet fils
    Comment puis-je proceder ?
    Pour une bonne résolution :
    - N'hésitez pas à donner le maximum d'informations sur vos problèmes, ca vous fera gagner du temps en évitant les aller-retours.
    - Si vous utilisez maven, pensez à rajouter votre pom !

    --> Le meilleur code est celui qui concrétise ce qui a été posé et analysé sur le papier

  2. #2
    Membre confirmé
    Avatar de Laine
    Femme Profil pro
    Doctorat informatique
    Inscrit en
    mars 2013
    Messages
    238
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 34
    Localisation : Algérie

    Informations professionnelles :
    Activité : Doctorat informatique

    Informations forums :
    Inscription : mars 2013
    Messages : 238
    Points : 646
    Points
    646
    Par défaut
    Salut

    Si je comprends bien ton arbre n'a qu'une seule feuille ? Qui en inversant l'arbre sera la racine ?

    Alors je pense que tu pourrais commencer à partir de la feuille, parcourir l'arbre selon un ordre (parcours préfixé ou postfixé) puis le stocker. Il ne te restera plus qu'à l'afficher

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    avril 2013
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : avril 2013
    Messages : 93
    Points : 126
    Points
    126
    Par défaut
    Merci de ta piste Laine.

    J'ai réalisé un changement dans la construction de l'arbre afin de l'inverser.
    Effectivement c'est un arbre à une feuille en relation 0/1 <---> *

    Les objets sont des serveurs (sera plus parlant je pense). Un serveur peut avoir un serveur père et un serveur peut avoir plusieurs sous serveurs.

    L'identifiant du serveur père est donc stockée dans le serveur fils.

    Voici la méthode :

    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
     
    	public LyObjectList getSons(LyObject parentNodeObject, LyTreeNode treeNode, String level,
    								LyTreeController controller)
    	{
    		LyApplication		application = controller.getApplication();
    		LySession			session = controller.getSession();
    		LyClassInfo			serveurClassInfo = application.getClassInfo(PRJ_****.CLS_SERVEUR_CLS);
    		LyObjectId			parentId = (parentNodeObject == null) ? null : parentNodeObject.getObjectId();
     
    		LyFilter			filter = new LyFilter(LyFilter.Type.OR);
    		LyFieldInfo			serveurParent = serveurClassInfo.getFieldInfo(PRJ_****.FLD_SERVEUR_SERVEUR_PARENT);
    		LyFilterExpression	exp1;
     
    		LySort				sort = getSort(controller, level);
    		LyFilter			oldFilter = getFilter(controller, level);
     
    		if (parentNodeObject != null
    			&& ((parentNodeObject.getRelationValue(PRJ_****.FLD_SERVEUR_SERVEUR_PARENT) != null
    					&& parentNodeObject.getRelationValue(PRJ_****.FLD_SERVEUR_SERVEUR_PARENT).getValueCount() > 0)))
    			return new LySimpleObjectList();
     
     
     
    		exp1 = new LyFilterExpression(serveurParent, parentId);
    		filter.addElement(exp1);
     
    		oldFilter.addElement(filter);
     
    		return new LyClassWorkSpace(session, serveurClassInfo, oldFilter, sort, false);
    	}
    PArcontre je ne remonte plus que les serveurs sur un seul niveau. Comment je peux faire pour construire récursivement mon arbre ?
    Pour une bonne résolution :
    - N'hésitez pas à donner le maximum d'informations sur vos problèmes, ca vous fera gagner du temps en évitant les aller-retours.
    - Si vous utilisez maven, pensez à rajouter votre pom !

    --> Le meilleur code est celui qui concrétise ce qui a été posé et analysé sur le papier

  4. #4
    Membre confirmé
    Avatar de Laine
    Femme Profil pro
    Doctorat informatique
    Inscrit en
    mars 2013
    Messages
    238
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 34
    Localisation : Algérie

    Informations professionnelles :
    Activité : Doctorat informatique

    Informations forums :
    Inscription : mars 2013
    Messages : 238
    Points : 646
    Points
    646
    Par défaut
    Citation Envoyé par cryo94 Voir le message
    ...
    PArcontre je ne remonte plus que les serveurs sur un seul niveau. Comment je peux faire pour construire récursivement mon arbre ?
    Eclaire moi un peu. Tu cherches à construire la structure de ton arbre (les fils sont les feuilles) à partir de la structure d'un arbre inversé (la racine est la feuille) ?

    Mais tu n'arrives à faire le traitement que sur un seul niveau. Que sur un seul niveau, à partir de la racine ou à partir des fils (tjrs dans le contexte de l'arbre inversé).

    Et donc tu cherches à élaborer un traitement récursif afin d'afficher l'arbre (les fils sont les feuilles)

    Excuse moi si je m'embrouille. Donc pourrais tu préciser quel traitement du veux appliquer récursivement sur les noeud de l'arbre et est ce que l'arbre est normal ou inversé ?

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    avril 2013
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : avril 2013
    Messages : 93
    Points : 126
    Points
    126
    Par défaut
    Je souhaite construire mon arbre de la branche à la feuille.

    Comme je stocke l'élément père, je faisait une construction inversée . Mon serveur fils avait de rattaché le serveur père qui pouvais avoir à son tour son serveur père.

    J'ai réussi a remettre dans l'ordre :
    Le serveur à de rattaché tout ses serveurs fils.. malheureusement il n'affiche pas plus loin que le premier niveau de l'arbre.

    En espérant être plus compréhensible
    Pour une bonne résolution :
    - N'hésitez pas à donner le maximum d'informations sur vos problèmes, ca vous fera gagner du temps en évitant les aller-retours.
    - Si vous utilisez maven, pensez à rajouter votre pom !

    --> Le meilleur code est celui qui concrétise ce qui a été posé et analysé sur le papier

  6. #6
    Membre confirmé
    Avatar de Laine
    Femme Profil pro
    Doctorat informatique
    Inscrit en
    mars 2013
    Messages
    238
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 34
    Localisation : Algérie

    Informations professionnelles :
    Activité : Doctorat informatique

    Informations forums :
    Inscription : mars 2013
    Messages : 238
    Points : 646
    Points
    646
    Par défaut
    Ce que je peux te conseiller de faire pour construire ta fonction récursive c'est de :
    1- isoler le traitement à effectuer sur chaque noeud, en sachant que celui-ci n'a d'informations que sur son père.
    J'ai réussi a remettre dans l'ordre :
    Le serveur à de rattaché tout ses serveurs fils
    2- identifier la condition d'arrêt de la récursivité. Un noeud sans père.

    Navrée de ne pas pourvoir t'aider plus que ça à ce stade.

  7. #7
    Membre habitué
    Profil pro
    Inscrit en
    avril 2013
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : avril 2013
    Messages : 93
    Points : 126
    Points
    126
    Par défaut
    Alors en fait j'ai l'impression que c'est plus vicieux que ca lol !

    J'ai reussis en simplifiant le traitement :

    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
    @Override
    	public LyObjectList getSons(LyObject parentNodeObject, LyTreeNode treeNode,
    			String level, LyTreeController controller) {
     
    		LySession session = controller.getSession();
    		LyClassInfo classInfoServeur = controller.getClassInfo(PRJ_****.CLS_SERVEUR_CLS);
    		LyFieldInfo infoParent = classInfoServeur.getFieldInfo(PRJ_****.FLD_SERVEUR_SERVEUR_PARENT);
     
    		// Construction du filter qui va permettre de déterminer si le serveur à des serveurs 
    		// enfants.
    		LyFilter filter = new LyFilter();
     
    		if(parentNodeObject != null && parentNodeObject.getId() != null){
    			LyFilterExpression exp = new LyFilterExpression(infoParent, parentNodeObject.getId());
    			filter.addElement(exp);
     
     
    			LyClassWorkSpace ws = new LyClassWorkSpace(session, classInfoServeur, filter, false);
    			if(!ws.isEmpty())
    			{
    				// J'ai des serveurs enfants
    				LyObjectList listeDesServeursEnfants = ws.getList(session, classInfoServeur);
    				return listeDesServeursEnfants;
    			}
     
    		}
     
     
    		return super.getSons(parentNodeObject, treeNode, level, controller);
    Beacoup de code inutile ce qui donnait un comportement non souhaité. J'ai viré ce qui ne servait pas puis ai simplement changé/ simplifier la construction sur le premier niveau.

    Pas besoin de récursivité le framework semble trouver ses petits tout seul

    Merci de ton aide en tout cas !
    Pour une bonne résolution :
    - N'hésitez pas à donner le maximum d'informations sur vos problèmes, ca vous fera gagner du temps en évitant les aller-retours.
    - Si vous utilisez maven, pensez à rajouter votre pom !

    --> Le meilleur code est celui qui concrétise ce qui a été posé et analysé sur le papier

  8. #8
    Membre confirmé
    Avatar de Laine
    Femme Profil pro
    Doctorat informatique
    Inscrit en
    mars 2013
    Messages
    238
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 34
    Localisation : Algérie

    Informations professionnelles :
    Activité : Doctorat informatique

    Informations forums :
    Inscription : mars 2013
    Messages : 238
    Points : 646
    Points
    646
    Par défaut
    Je t'en prie, avec plaisir. Même si je n'ai rien fait

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

Discussions similaires

  1. Inverser l'ordre des éléments d'un tableau
    Par nitch01 dans le forum Débuter
    Réponses: 5
    Dernier message: 28/10/2009, 08h18
  2. Inversion des éléments d'un tableau
    Par IDE dans le forum Algorithmes et structures de données
    Réponses: 8
    Dernier message: 23/10/2006, 08h29
  3. [C#] Inverser l'ordre des éléments d'une Hashtable
    Par lancer83 dans le forum Windows Forms
    Réponses: 10
    Dernier message: 31/08/2006, 20h03
  4. Réponses: 4
    Dernier message: 17/10/2005, 14h23

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