Menu
CoddyTech

Lowest Common Ancestor of a BST

Se te da un árbol binario de búsqueda almacenado en el arreglo tree en orden por niveles, y dos valores p y q que aparecen en él. La raíz está en el índice 0; los hijos del nodo en el índice i están en 2*i+1 (izquierda) y 2*i+2 (derecha); -1 marca una posición vacía, y el arreglo puede terminar con entradas -1 adicionales. En un árbol binario de búsqueda, todos los valores del subárbol izquierdo de un nodo son menores que el valor del nodo, y todos los valores de su subárbol derecho son mayores.

Escribe una función llamada lowestCommonAncestor que devuelva el valor del ancestro común más bajo de p y q: el nodo más profundo que tiene a ambos en su subárbol. Un nodo cuenta como parte de su propio subárbol, así que si p está por encima de q, la respuesta es el propio p.

Función

lowestCommonAncestor(tree: integer-array, p: integer, q: integer) → integer
treeinteger-array
el árbol binario de búsqueda en orden por niveles, con -1 para una posición vacía
pinteger
el primer valor que se debe encontrar
qinteger
el segundo valor que se debe encontrar
Devuelveinteger
el valor del nodo más profundo que tiene tanto a p como a q en su subárbol

Restricciones

  • 1 ≤ tree.length ≤ 32767
  • Cada tree[i] es -1 o un valor con 0 ≤ tree[i] ≤ 105.
  • tree[0] nunca es -1, así que el árbol tiene al menos un nodo.
  • El arreglo puede terminar con entradas adicionales -1 después del último nodo.
  • Ambos hijos de un espacio vacío también están vacíos, y la profundidad es como máximo 14.
  • El árbol es un árbol binario de búsqueda válido, por lo que todos sus valores son distintos.
  • p y q son valores de nodos del árbol. Pueden venir en cualquier orden y ser iguales.

Ejemplos

Entrada
tree = [20, 8, 31, 3, 12, 25, 40, -1, -1, 10, 15]p = 3q = 15
Salida
8
Explicación
El 3 es el hijo izquierdo de 8, y el 15 cuelga debajo de 12, a la derecha de 8. Al subir desde cada uno de ellos, el primer nodo al que llegan ambos es 8, así que esa es la respuesta; la raíz 20 también es un antepasado común, pero está más arriba.

lock icon+12 pruebas ocultas al enviar

challenge icon

Para ir más allá

¿Qué cambiarías si p o q pudieran no estar en el árbol y la función tuviera que devolver -1 en ese caso?

Restablecer código
def lowestCommonAncestor(tree, p, q):
    # Escribe el código aquí
Casos de prueba

Caso 1

Caso 2

Caso 3

Entrada

tree = [20, 8, 31, 3, 12, 25, 40, -1, -1, 10, 15]
p = 3
q = 15

Esperado

8