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

C++ Discussion :

Arbre naire en C++


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 35
    Par défaut Arbre naire en C++
    Bonjour,

    J'ai actuellement besoin pour mon projet de pouvoir gérer des arbres n-aires.
    Il n'y a pas dans la STL en standard de telle conteneur, j'ai vu sur internet qu'il existe de nombreuses librairies ou sources pour réaliser ces arbres.

    Quelle est selon vous la meilleure solution ? Mes impératifs sont :
    - gestion d'arbre n-aires (pas uniquement binaire)
    - chaque noeud de l'arbre pourra contenir n'importe quelle type de données (une struct dans mon cas précisément)
    - on devra naturellement trouver les fonctions usuels inhérentes aux arbres : ajout d'un fils ainé, d'un frère, parcours de l'arbre selon plusieurs méthodes, recherche d'une valeur particulière dans l'arbre
    - j'aimerais de plus pouvoir visualiser (meme dans une console en mode texte) l'arbre crée.

    Petit précision je suis linux ubuntu 6.10 & gcc .
    merci par avance

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    98
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 98
    Par défaut
    Salut,

    Je pense qu'il y a plusieurs réponses possibles et correctes à ton probleme. Cependant tu devrais préciser quels sont tes désir du point de vu de la performance de la simplicité du code etc ....

    Ensuite essayer de nous présenter une piste que tu emprunterais par toi même pour que la discussion soit constructive et non pas simplement un code tout craché.

    @ ++
    Seb

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 35
    Par défaut
    J'ai besoin d'un code le plus épuré possible. Plus simplement je ne veux pas une classe faisant des tonnes de fonctions qui ne me serviront à rien.

    Concernant les performances on va dire que j'aurais des arbres à environ 10 branches avec une profondeur total de 15, j'ai besoin de pouvoir parcourir cette arbre assez rapidement pour trouver précisement une valeur. Mon appli doit pouvoir tourner en temps réel.

    Concernant les pistes je me suis orienté sur ceci pour le moment :
    www.up.univ-mrs.fr/wcpp/V1/Lecons/L19.pdf

    J'ai adapté ce code à mon programme il marche très bien mais il me manque plusieurs fonctions, notemment une fonction permettant de visualiser "graphiquement (le mode texte m'irait amplement) l'arbre construit.

    Sinon il existe aussi cette classe :
    http://stlplus.sourceforge.net/stlplus/docs/ntree.html

    mais je pense qu'il y'à beaucoup de choses dont je n'aurais pas l'utilité.

    merci

  4. #4
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par défaut
    Salut,

    Une des solutions les plus simples, c'est tout simplement une structure ou une classe sous la forme de
    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
     
    struct noeud
    {
        noeud(type& data,noeud* parent=NULL):m_parent(parent),
                                             m_data(data){}
        ~noeud()
        {
            //il faut détruire les enfants
            for(unsigned int i=0;i<m_enfants.size();i++)
                delete m_enfants[i];
           //par acquit de conscience
           m_parent=NULL;
           m_enfants.clear();
        }
        noeud * parent;
        std::vector<noeud*> m_enfants;
        type m_data;
        bool IsSheet()const{return m_enfant.size()==0;}
        bool IsRoot()const{return m_parent==NULL;}
    };
    Evidemment, dans l'exemple tel que je te l'ai donné, il n'y a aucune encapsulation, et ce n'est pas forcément des plus conseillé en orienté objet...

    Mais, si tu utilises une classe au lieu d'une struct, il te suffira de mettre les accesseurs/mutateurs qui vont bien

    Si tes noeud doivent être triés, rien ne t'empeche de te tourner vers une std::map ou tout autre conteneur associatif s'adaptant à tes besoins
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  5. #5
    Membre chevronné
    Avatar de NewbiZ
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2002
    Messages
    184
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2002
    Messages : 184
    Par défaut
    Il me semble qu'en informatique, lorsqu'on parle de feuille, on ne fait pas référence à celle sur laquelle on écrit , mais plutot à celle effectivement de l'arbre (leaf)
    (monsieur tatillon aujourd'hui)

  6. #6
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par défaut
    Citation Envoyé par NewbiZ
    Il me semble qu'en informatique, lorsqu'on parle de feuille, on ne fait pas référence à celle sur laquelle on écrit , mais plutot à celle effectivement de l'arbre (leaf)
    (monsieur tatillon aujourd'hui)
    Et tu as raison... simplement, monsieur fatigué aujourd'hui a écrit le premier terme qui lui est passé par la tete en pensant "feuille"
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

Discussions similaires

  1. Longueur chemin entre 2 noeuds d'un arbre naire
    Par alex2746 dans le forum Général Java
    Réponses: 16
    Dernier message: 26/08/2011, 10h25
  2. arbres BB
    Par cedrick essale dans le forum Algorithmes et structures de données
    Réponses: 4
    Dernier message: 03/12/2002, 15h39
  3. Qu'est ce qu'un arbre
    Par sandrine dans le forum C
    Réponses: 8
    Dernier message: 23/10/2002, 13h12
  4. créer une arborescence windows sous forme d'arbre java
    Par chupachoc dans le forum Composants
    Réponses: 3
    Dernier message: 01/10/2002, 16h48
  5. arbre de parcour d'arborescence windows
    Par chupachoc dans le forum Composants
    Réponses: 7
    Dernier message: 09/09/2002, 08h09

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