Cómo verificar si un árbol no binario está equilibrado en altura

En primer lugar, deberá definir qué se entiende por altura equilibrada. Podría tener muchas interpretaciones. Por ejemplo, digamos,
H_l = altura del subárbol izquierdo
H_r = altura del subárbol derecho

Entonces, equilibrado en altura podría significar:
El | H_l – H_r | <= 2 debe ser verdadero para todos los subárboles , o,
El | H_l / H_r | <= 2 || El | H_r / H_l | <= 2 para todos los árboles secundarios (ninguno de los árboles secundarios es mayor que el doble del otro árbol secundario), etc.

Una vez que haya formulado la definición de equilibrio de altura, su tarea estará lista.

En lenguaje de pseudocódigo:

Lista [Árbol] getChildren (Árbol t) {
// todas las entradas “1” en la fila del árbol t son elementos secundarios de t
}

altura int (árbol t) {
int respuesta = 0;
si (t es Nulo) devuelve 0;
más {
forall (niño en t.getChildren) {
respuesta = max (respuesta, altura (hijo))
}
devuelve 1 + respuesta;
}
}

bool isBalanced (Árbol t) {
si (t es nulo)
luego devuelve verdadero
más {
respuesta bool = verdadero;
forall (niño en t.getChildren) {
respuesta = respuesta e isBalanced (hijo)
}
forall (child1 en t.getChildren) {
forall (child2 en t.getChildren) {
respuesta = respuesta y abs (altura (niño1) – altura (niño2)) <= 2
}
respuesta de regreso
}
}

Espero que hayas entendido. Si su definición / formulación es correcta, la implementación del código se convierte en una tarea trivial.

Gracias por pedirme que responda esta pregunta.

Como no ha pedido el código, solo estoy escribiendo el algoritmo
Asumiendo que trre sea un árbol n-ary
1.Comience desde el vértice raíz
2. Calcule el máximo y el mínimo entre la altura de todos sus elementos secundarios si la diferencia entre máximo y mínimo es mayor que 1, entonces el árbol no está equilibrado en altura
3.Recurrentemente haga esto para todos sus hijos hasta que llegue a nulo.