Question

Je veux écrire un programme qui me dit si un arbre est équilibré ou non. Dans ce cas, des moyens équilibrés même hauteur ou une différence de hauteur de 1.

est ce que je l'ai écrit à ce jour, mais il ne fonctionne pas pour la différence de hauteur de 1. Pourquoi?

balanced(l(_)).
balanced(b(B1, B2)):-
    height(B1,H),
    height(B2,H),
    balanced(B1),
    balanced(B2).

balanced(b(B1,B2)):-
    height(B1,H + 1),
    height(B2,H),
    balanced(B1),
    balanced(B2).

balanced(b(B1,B2)):-
    height(B1,H),
    height(B2,H + 1),
    balanced(B1),
    balanced(B2).
Était-ce utile?

La solution

H + 1 n'est pas évalué à la valeur de H plus un si vous ne dites pas Prolog à faire l'évaluation arithmétique; à la place, Prolog construit un terme avec + comme foncteur et H et 1 les arguments. (Essayez H + 1 =.. L et vérifier la valeur de L pour vous convaincre de ce fait.)

Faites quelque chose comme

height(B1, H1),
height(B2, H2),
abs(H1 - H2) =< 1.

=< effectuera l'évaluation arithmétique.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top