Arbre Binaire

Freaks -  
 Freaks -
Bonjour,

J'essaye de faire un programme en Scheme, qui me permet de tester si deux arbres binaires ont la même forme ou non. J'ai réussi à faire un programme qui me permettait de tester si deux arbres binaires étaient égaux en utilisant l'étiquette.

J'aimerai avoir de l'aide pour ce programme, celui qui teste si deux arbres binaires ont la même forme ou non.

Merci d'avance.
Freaks.
A voir également:

4 réponses

KX Messages postés 19031 Statut Modérateur 3 020
 
Principe de récursion sur les arbres :

Si deux arbres sont vides, ils ont la même forme.
Si l'un des deux est vide, et pas l'autre, ils n'ont pas la même forme.
Sinon, ils ont la même forme quand leurs sous-arbres ont la même forme.
0
KX Messages postés 19031 Statut Modérateur 3 020
 
C'est le même principe que l'égalité des arbres, sauf que tu ne compares pas les "étiquettes"
0
Freaks
 
Mon programme sur l'égalité de deux arbres binaires est:

(define (ab-egal? B1 B2)
(if (and (ab-noeud? B1)(ab-noeud? B2))
(if (equal? (ab-etiquette B1)(ab-etiquette B2))
(if (ab-egal? (ab-droit B1)(ab-droit B2))
(ab-egal? (ab-gauche B1)(ab-gauche B2))
#f)
#f)
#t))

Mais je vois pas comment écrire le programme pour voir si ils ont même forme...
0
Freaks
 
J'ai fais le même programme à peu près mais sans la comparaison des "étiquettes" mais ça ne fonctionne pas quand je teste deux arbres qui n'ont pas la même forme...
0
KX Messages postés 19031 Statut Modérateur 3 020
 
Je ne sais pas trop à quoi sert ab-noeud? mais si ça test si un arbre est non-vide, il te manque un cas, en effet, si B1 ou B2 est vide, tu arrives sur #t, or si un des deux arbres est forcément vide, l'autre ne l'est pas forcément auquel cas les deux arbres ne sont pas égaux.

Sinon, quand ab-egal? sera correct, il te suffira d'enlever le test d'égalité des étiquettes pour avoir ce que tu veux, car finalement les deux arbres ont la même forme s'ils sont égaux quand on "efface" toutes les valeurs qu'il contient.

Remarque : ces deux codes sont équivalents et permettrai d'enlever des if à ton code.
(if (condition_booleenne) calcul_booleen #f) 
(and condition_booleenne calcul_booleen)
0
Freaks
 
Oui effectivement ab-noeud? teste si un arbre est non-vide.
C'est vraie que j'ai pas mis le cas où, si un des deux arbres est non vide et l'autre l'est, ils ne sont pas égaux...

Par contre, j'ai déjà essayer juste d'enlever le teste d'égalité des étiquettes mais quand je fais un jeux de test avec deux arbres qui ont pas la même forme, ça me renvoie #t alors qu'il devrait me renvoyait #f :s
0
KX Messages postés 19031 Statut Modérateur 3 020
 
Bien sûr, c'est le #t du cas que tu as oublié qui revient ^^
0
Freaks
 
Ah oui, okay. :p
Merci. Et aussi je voulais savoir si je veux voir si un arbre binaire A1 est un sous-arbre de l'arbre binaire A2 ou non, comment je peux m'y prendre ?
0
KX Messages postés 19031 Statut Modérateur 3 020
 
Ce n'est pas optimal, mais si tu considères X l'étiquette de A1, tu cherches dans A2 tous les sous-arbres qui ont X pour étiquette, et tu regardes si ces sous-arbres là sont égaux à A1.
0
Freaks
 
Okay, merci, je vais essayer de faire le programme.
Merci encore =)
0