AVL Binary Heap (Balanace test)

Estoy intentando realizar una prueba si un árbol es un árbol AVL o no usa prólogo.

He realizado una prueba de altura que funciona para las pruebas que he hecho hasta ahora, pero mi prueba de equilibrio todavía no está siendo sólida.

Este es mi trabajo hasta ahora:

avl('Branch'(LeftBranch,RightBranch)) :-
  height(LeftBranch,H1),
  height(RightBranch,H2),
  abs(H1-H2) =< 1.

He basado este código a partir de un código anterior de stackoverflow. Pero no funciona en todos los casos. Incluirá mi código de altura. En algún lugar he cometido un error y estoy seguro de dónde encontrarlo.

height(leaf(_),1).
height('Branch'(LeftBranch,RightBranch,H) :-
  height(LeftBranch,H1),
  height(RightBranch,H2),
  H is max(H1,H2)+1.

¿Por qué mi código no evalúa algunos árboles?

Prólogo - Árbol equilibrado o no

Este fue el hilo en el que basé mi prueba del árbol de equilibrio, y lo intenté con el árbol que publicó en los comentarios, pero fallé, ¿alguna idea?

Respuestas a la pregunta(2)

Su respuesta a la pregunta