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 binaire appel recursive


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Juillet 2006
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 18
    Par défaut Arbre binaire appel recursive
    slt tout le monde
    je veux savoir une strategie recursive pour regler un probléme sur ma fonction qui prend en paramétre l'adresse memoire de la racine d'un arbre AVL
    et l'adresse memoire d'un noeud x de ce même arbre et qui retourne l'adresse-mémoire du noued suivant x dans l'orde "priorite au pére"
    le modele d'imlantation d'un noeud typique de l'arbre AVL est le suivant :
    typedef struct noeud
    {
    int valeur ;
    struct noeud *gauche ,*droite;
    }Noeud ;
    typedef Noeud*Arbre;
    prototype de la fonction est:
    Arbre suivant(Arbre racine;Arbre x)
    {}

  2. #2
    Expert confirmé

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Par défaut
    Citation Envoyé par wedoud
    slt tout le monde
    je veux savoir une strategie recursive pour regler un probléme sur ma fonction qui prend en paramétre l'adresse memoire de la racine d'un arbre AVL
    et l'adresse memoire d'un noeud x de ce même arbre et qui retourne l'adresse-mémoire du noued suivant x dans l'orde "priorite au pére"
    le modele d'imlantation d'un noeud typique de l'arbre AVL est le suivant :
    typedef struct noeud
    {
    int valeur ;
    struct noeud *gauche ,*droite;
    }Noeud ;
    typedef Noeud*Arbre;
    prototype de la fonction est:
    Arbre suivant(Arbre racine;Arbre x)
    {}
    Bonjour, on dirait que tu demandes qu'on ecrive la fonction suivant... Ce n'est pas notre rôle...

    - Qu'est-ce qui te bloque ?
    - Qu'est-ce que tu n'arrives pas à faire ?

    Jc

    PS: Cacher les pointeurs par un typedef est une mauvaise idée et habitude...

  3. #3
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Par défaut
    De toute façon, c'est de l'algo, pas du C.
    Ça veut dire quoi
    retourne l'adresse-mémoire du noued suivant x dans l'orde "priorite au pére"
    "La haine seule fait des choix" - Koan Zen
    "Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
    "Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
    Faites du Prolog, ça vous changera les idées !
    Ma page Prolog
    Mes codes sources commentés

    Mon avatar : La Madeleine à la veilleuse de Georges de La Tour

  4. #4
    Expert confirmé
    Avatar de Thierry Chappuis
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Mai 2005
    Messages
    3 499
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Suisse

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 499
    Par défaut
    Salut,

    Essaie de nous proposer une implémentation de ta fonction et dis-nous où sont les endroits où tu rencontre des difficultés. Au passage, c'est une bonne habitude à prendre d'écrire ton code à l'intérieur des balises prévues à cet effet. Ca sera plus lisible.

    A+

    Thierry
    "The most important thing in the kitchen is the waste paper basket and it needs to be centrally located.", Donald Knuth
    "If the only tool you have is a hammer, every problem looks like a nail.", probably Abraham Maslow

    FAQ-Python FAQ-C FAQ-C++

    +

  5. #5
    Membre averti
    Inscrit en
    Juillet 2006
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 18
    Par défaut
    merci de votre coprhention
    mon probléme bien explique dans l'image suivant :
    Images attachées Images attachées  

  6. #6
    Rédacteur

    Avatar de gege2061
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Juin 2004
    Messages
    5 840
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Juin 2004
    Messages : 5 840
    Par défaut
    Bonjour,

    Citation Envoyé par wedoud
    merci de votre coprhention
    mon probléme bien explique dans l'image suivant :
    Je n'ai pas trop compris le principe mais apparemment tu souhaite remonter dans l'arborescence de l'arbre ? Dans ce cas, il faut (méthode la plus simple) ajouter un champs racine dans ta structure Noeud, qui représente le noeud parent.

  7. #7
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Par défaut
    Et peut-être un indicateur "deja_visité" pour plus de facilité de programmation.
    "La haine seule fait des choix" - Koan Zen
    "Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
    "Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
    Faites du Prolog, ça vous changera les idées !
    Ma page Prolog
    Mes codes sources commentés

    Mon avatar : La Madeleine à la veilleuse de Georges de La Tour

  8. #8
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Par défaut
    Citation Envoyé par mujigka
    Salut,

    Essaie de nous proposer une implémentation de ta fonction et dis-nous où sont les endroits où tu rencontre des difficultés.
    A+

    Thierry
    wedoud>> c'est ça le principe du forum. On n'est pas là pour faire tes programmes, on est là pour t'aider !
    "La haine seule fait des choix" - Koan Zen
    "Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
    "Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
    Faites du Prolog, ça vous changera les idées !
    Ma page Prolog
    Mes codes sources commentés

    Mon avatar : La Madeleine à la veilleuse de Georges de La Tour

  9. #9
    Membre averti
    Inscrit en
    Juillet 2006
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 18
    Par défaut
    merci

  10. #10
    Expert confirmé
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Par défaut
    Tu es tombé sur un mauvais jour des participants au forum semble t-il , car, à mon avis, ce n'est pas une question courante ni facile à traiter de façon récursive.
    Puisque tu veux une version récursive, c'est la récursivité qui doit créer les liens vers les péres. Il faut donc rechercher récursivement le noeud X, mais la position de X n'est pas la bonne réponse à la question et il faut continuer un cran plus loin (et un seulement) pour obtenir le noeud suivant et sortir de la récursion
    Personnellement, je pense qu'il manque un paramètre à la fonction pour indiquer si le noeud X a déjà été trouvé (et on passe alors à la recherche du suivant) ou non (et on en est encore à la première phase).

    Voici une version qui, je crois, marche pour tous les noeuds du diagramme que tu as proposé. Je ne le garantis pas mais t'invite, si ça t'interresse, à le tester pour des configurations plus complexes

    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
    Noeud * Suivant(const Noeud * arbre, const Noeud *  X, int * found)
    {
     Noeud * p = (Noeud *) arbre;
     if (arbre == X)
       {
        *found = 1;
         return arbre->gauche ? arbre->gauche :arbre->droite ;
       }
     if (*found == 0 && arbre->gauche)
       {
         p = Suivant( arbre->gauche,X,found);
         if(p == NULL)  return arbre->droite;
       }
     if(*found == 0  && arbre->droite)
         p = Suivant( arbre->droite,X,found);
     return p;
    }
    *found doit être initialisé à zéro
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     int found = 0;
     NoeudSuivant =  Suivant(racine, x ,&found);
    Bonne soirée

Discussions similaires

  1. Afficher un arbre binaire avec sa structure
    Par PhoneKilleR dans le forum C
    Réponses: 7
    Dernier message: 23/04/2008, 23h24
  2. suppression d'un arbre binaire
    Par NomUtilisateurDejaPris dans le forum C
    Réponses: 11
    Dernier message: 16/02/2004, 10h05
  3. [Arbre binaire de Recherche]
    Par Giovanny Temgoua dans le forum Algorithmes et structures de données
    Réponses: 11
    Dernier message: 06/02/2004, 11h45
  4. Arbre binaire
    Par Heaven dans le forum Algorithmes et structures de données
    Réponses: 6
    Dernier message: 02/02/2004, 19h01
  5. [LG]probleme de creation arbre binaire
    Par jsaviola dans le forum Langage
    Réponses: 2
    Dernier message: 06/01/2004, 20h57

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