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.
- ¿Qué algoritmo de ML debo usar para una aplicación de selección de automóviles basada en Tinder?
- ¿Puede un camino más corto contener un ciclo?
- ¿La matriz de Java de primitivas se almacena en la pila o el montón?
- ¿Cuál es el mejor y más fácil algoritmo de búsqueda?
- ¿Es posible implementar algoritmos de aprendizaje automático en lenguaje ensamblador?
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.