Pregunta

Quiero escribir un programa que me diga si un árbol está equilibrado o no. En este caso, equilibrado significa la misma altura o una diferencia de altura de 1.

Esto es lo que he escrito hasta ahora, pero no funciona para la diferencia de altura de 1. ¿Por qué?

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).
¿Fue útil?

Solución

H + 1 no se evalúa al valor de H Además, uno si no le dice a Prolog que realice una evaluación aritmética; En cambio, Prolog construye un término con + como el functor y H y 1 Como los argumentos. (Probar H + 1 =.. L y verifique el valor de L para convencerse de este hecho.)

Hacer algo como

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

=< Realizará evaluación aritmética.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top