similares a:
height(t) = if (t==NULL) then 0 else 1+max(height(t.left),height(t.right))
Usted tiene:
perfect(t) = if (t==NULL) then 0 else {
let h=perfect(t.left)
if (h != -1 && h==perfect(t.right)) then 1+h else -1
}
Dónde perfecta (t) devuelve -1 si las hojas no son todos a la misma profundidad, o cualquier nodo tiene un solo niño; de lo contrario, devuelve la altura.
Editar: se trata de "completo" = "Un árbol binario perfecto es un árbol binario completo en el que todas las hojas están a la misma profundidad o mismo nivel 1 (Esta ambigüedad también se llama un árbol binario completo.)." (Wikipedia).
Aquí hay una comprobación recursiva de: "Un árbol binario completo es un árbol binario en el que cada nivel, excepto posiblemente el último, está completamente lleno, y todos los nodos están lo más a la izquierda posible". Devuelve (-1, falso) si el árbol no está completo; de lo contrario (alto, lleno) si lo está, con == verdadero verdadero si es perfecto.
complete(t) = if (t==NULL) then (0,true) else {
let (hl,fl)=complete(t.left)
let (hr,fr)=complete(t.right)
if (fl && hl==hr) then (1+h,fr)
else if (fr && hl==hr+1) then (1+h,false)
else (-1,false)
}
por favor refiérase a la http://stackoverflow.com/questions/18159884/whether-a-given-binary-tree-is-complete-or-not para uno de los método más sencillo. – Trying