Bonjour,

j'ai un probleme que j'ai du mal à le résoudre et je vaudrais votre aide, il s'agit d'un arbre binaire destiné à classer les ouvrages d’une bibliographie, cet arbre (BTREE) est organisé de cette manière:
  • soit arbre vide
  • soit la donnée:
    • une clé: identifiant un livre
    • d’un nom d’auteur
    • un titre
    • deux branches, gauche et droite, qui sont des objets de type BTREE


voici le constructeur du BTREE:
Code :
1
2
3
4
5
6
7
8
9
(define (mk-btree key-0 name-0 title-0 lbr-0 rbr-0)
  ;;  STRING,STRING,STRING ,BTREE,BTREE -> BTREE
  ;;  Retourne un arbre bibliographique non vide à partir des données qui le
  ;;  composent.
  (cons key-0
	(cons name-0 
	      (cons title-0 
		     (cons lbr-0 rbr-0)))))
ainsi que deux sélecteurs:

Code :
1
2
3
4
5
6
7
8
9
10
11
12
(define author-name
  ;;  BTREE -> STRING
  ;;  Retourne le nom de l'auteur du livre placé à la racine d'un arbre
  ;;  bibliographique non vide.
  cadr)

(define title
  ;;  BTREE -> STRING
  ;;  Retourne le titre du livre placé à la racine d'un arbre bibliographique
  ;;  non vide.
  caddr)
ma question est la suivante: la liste linéaire de tous les titres écrits par l’auteur athor-name0 :

voici ma version brute:
Code :
1
2
3
4
5
6
7
8
9
(define (titles-for-author author-name0 btree)  
  (if (empty-tree? btree)
      '()
      (if (equal? author-name0 (author-name btree))
          (cons (title btree) (cons (titles-for-author author-name0 (left-branch btree)) 
                                    (titles-for-author author-name0 (right-branch btree))))      
          (cons (titles-for-author author-name0 (left-branch btree)) 
                                    (titles-for-author author-name0 (right-branch btree))))))
cette solution me donne des résultats correctes mais avec des listes vides