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

Algorithmes et structures de données Discussion :

Parcours postfixe d'un arbre en Scheme


Sujet :

Algorithmes et structures de données

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Juillet 2013
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2013
    Messages : 23
    Points : 6
    Points
    6
    Par défaut Parcours postfixe d'un arbre en Scheme
    Bonjour,

    Je suis actuellement un cours sur la récursivité en Scheme, et je galère un peu sur les arbres. Je suis sur une fonction qui rend une liste des valeurs en ordre postfixe (les feuilles avant la racine).

    Voilà ma fonction :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    (define (liste-postfixe B)
      (if (ab-noeud? B)
           (cons (liste-postfixe (ab-gauche B))
                 (cons (liste-postfixe (ab-droit B))
           (ab-etiquette B)))
          '()))
    que j'applique à cet arbre :

    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
    (liste-postfixe (ab-noeud 1
                      (ab-noeud 2
                         (ab-noeud 4
                                   (ab-noeud 9 (ab-vide) (ab-vide) )
                                   (ab-noeud 3 (ab-vide) (ab-vide)))
                         (ab-noeud 5
                                   (ab-noeud 3 (ab-vide) (ab-vide) )
                                   (ab-noeud 0 (ab-vide) (ab-vide))))
                      (ab-noeud 3
                         (ab-noeud 6
                                   (ab-noeud 2 (ab-vide) (ab-vide) )
                                   (ab-noeud 3 (ab-vide) (ab-vide)))
                         (ab-noeud 7
                                   (ab-noeud 6 (ab-vide) (ab-vide) )
                                   (ab-noeud 8 (ab-vide) (ab-vide ) )))))
    et voilà le résultat :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ((((() () . 9) (() () . 3) . 4) ((() () . 3) (() () . 0) . 5) . 2) (((() () . 2) (() () . 3) . 6) ((() () . 6) (() () . 8) . 7) . 3) . 1)
    Il s'agit bien des valeurs en ordre postfixe mais comme vous le voyez, il y a pas mal de bordel en plus, ce qui est lié certainement à un "cons" en trop ou mal placé, mais pour l'instant je ne vois pas comment faire autrement.

    Quelqu'un connaissant le scheme a-t-il une idée ?

    Mercie d'avance.

  2. #2
    Rédacteur/Modérateur

    Avatar de yahiko
    Homme Profil pro
    Développeur
    Inscrit en
    Juillet 2013
    Messages
    1 424
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Juillet 2013
    Messages : 1 424
    Points : 8 712
    Points
    8 712
    Billets dans le blog
    43
    Par défaut
    Après une phase de dérouillage de Scheme (ça fait une éternité) voilà l'algo simple.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    (define (postfixe arbre)
      (if (not (null? arbre))
          (if (not (null? (cdr arbre)))
              (cons (cons (postfixe (car (cdr arbre)))
                          (postfixe (cdr (cdr arbre)))
                          )
                    (list (car arbre))
              )
              (list (car arbre))
          )
          ()
      )
    )
    La fonction postfixe appliquée à l'arbre binaire (1 (2 (4) (5)) (3)) donne le résultat suivant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    (((((4) (5)) 2) (3)) 1)

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Juillet 2013
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2013
    Messages : 23
    Points : 6
    Points
    6
    Par défaut
    On ne doit pas utiliser la même version de Scheme.
    Je ne peux pas écrire (car arbre) dans ma version. Il me répond que "car" réclame une liste.
    En essayant de suivre ton algorithme, je peux écrire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    (define (liste-postfixe B)
      (if (ab-noeud? B)
           (cons (cons (liste-postfixe (ab-gauche B))
                 (liste-postfixe (ab-droit B)))
           (ab-etiquette B))
          '()))
    Ce qui me donne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ((((((((()) . 9) (()) . 3) . 4) (((()) . 3) (()) . 0) . 5) . 2) (((((()) . 2) (()) . 3) . 6) (((()) . 6) (()) . 8) . 7) . 3) . 1)
    C'est-à-dire la même chose. Je n'ai pas une idée très précise de ce que fait la fonction, et ça rend le bug difficile à corriger.

  4. #4
    Rédacteur/Modérateur

    Avatar de yahiko
    Homme Profil pro
    Développeur
    Inscrit en
    Juillet 2013
    Messages
    1 424
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Juillet 2013
    Messages : 1 424
    Points : 8 712
    Points
    8 712
    Billets dans le blog
    43
    Par défaut
    Le code que j'ai posté fonctionne avec toutes les versions de Scheme, alors que celui que tu utilises fait appel à des définitions qui sont propres à ton devoir (car je suppose qu'il s'agit d'un devoir scolaire).

    Tu sembles avoir des difficultés tout autant avec la syntaxe de Scheme qu'avec l'algorithme pourtant simple du parcours postfixe.

    Si tu as des questions spécifiques au langage Scheme, je t'invite à poster ici : http://www.developpez.net/forums/f51...onnels/scheme/

    Une fois que tu auras compris les bases de Scheme, tu pourras revenir ici pour parler de l'algorithme proprement dit.

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Juillet 2013
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2013
    Messages : 23
    Points : 6
    Points
    6
    Par défaut
    Je pense connaître maintenant la syntaxe du Scheme, mais j'ai travaillé sur des listes jusque-là et non sur des arbres. C'est cette structure de données que je connais mal.
    Merci pour ton aide en tout cas.

Discussions similaires

  1. Réponses: 1
    Dernier message: 26/05/2011, 13h00
  2. Création d'un parcours de traverse d'arbre
    Par Bakura dans le forum Algorithmes et structures de données
    Réponses: 2
    Dernier message: 26/11/2009, 17h50
  3. Parcours d'arbre binaire iteratif et postfixe
    Par coyotte507 dans le forum Algorithmes et structures de données
    Réponses: 6
    Dernier message: 22/09/2008, 20h12
  4. [SQL toute vers.] Parcours et selection d'ARBRES
    Par pi05 dans le forum Langage SQL
    Réponses: 6
    Dernier message: 03/08/2006, 14h30
  5. arbre de parcour d'arborescence windows
    Par chupachoc dans le forum Composants
    Réponses: 7
    Dernier message: 09/09/2002, 09h09

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