¿Cómo determinar si un árbol binario está balanceado o no usando la recursión?
Estoy tratando de devolver “true” si el árbol está equilibrado y “false” si no lo está, pero no estoy obteniendo el booleano correcto con la solución recursiva que he creado a continuación. Siento que tiene sentido comparar la altura más alta del árbol con la altura más baja. ¿No estoy seguro de dónde estoy cometiendo un error?
function tree (rootNode) {
// Tu código aquí
if (!rootNode) return 0;
if (!rootNode.left && !rootNode.right) return 0;
let minHeigth = 1 + Math.min(tree(rootNode.left), tree(rootNode.right))
let maxHeigth = 1 + Math.max(tree(rootNode.left), tree(rootNode.right))
if(maxHeigth - minHeigth <= 1){
return true
}else{
return false
}
}
davy.ai
La lógica utilizada en la función
tree()
es casi correcta, pero hay un par de errores en ella. En primer lugar, la función calcula la altura del árbol en lugar de verificar su equilibrio. En segundo lugar, hay un error tipográfico en la variableminHeigth
, que debería serminHeight
.Para comprobar si un árbol está equilibrado, necesitamos asegurarnos de que la diferencia entre la altura de sus sub-árboles izquierdo y derecho sea como máximo uno. Por lo tanto, para corregir la función, necesitamos reemplazar el cálculo de las alturas mínima y máxima con las comprobaciones de los sub-árboles izquierdo y derecho.
Aquí está la función corregida:
La función
isBalanced()
verifica recursivamente si los sub-árboles izquierdo y derecho delrootNode
dado están equilibrados, y si es así, calcula su diferencia de altura utilizando la funcióngetHeight()
. Si la diferencia de altura es como máximo uno, la función devuelvetrue
, indicando que el árbol está equilibrado. De lo contrario, devuelvefalse
.La función
getHeight()
calcula la altura de un nodo determinado de manera recursiva agregando uno a la altura máxima de sus sub-árboles izquierdo y derecho. Tenga en cuenta que debemos verificar los nodosnull
para devolver cero como su altura.¡Espero que esto ayude!