Menu
CoddyTech

Lowest Common Ancestor of a BST

Se te proporciona un árbol binario de búsqueda almacenado en orden de montón en el arreglo tree: la raíz está en el índice 0, los hijos del índice i están en 2*i+1 (izquierda) y 2*i+2 (derecha), y -1 marca un espacio vacío. Cada valor en el subárbol izquierdo de un nodo es menor que el valor del nodo, y cada valor en su subárbol derecho es mayor.

Escribe lowestCommonAncestor, que devuelve el valor del ancestro común más bajo de los valores p y q, que están ambos en el árbol: el nodo más profundo que tiene a ambos en su subárbol. Un nodo forma parte de su propio subárbol, así que si p está por encima de q, la respuesta es p.

Función

lowestCommonAncestor(tree: integer-array, p: integer, q: integer) → integer
treeinteger-array
el árbol de búsqueda binaria en orden por niveles, con -1 para un espacio vacío
pinteger
el primer valor que se debe encontrar
qinteger
el segundo valor que hay que 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 -1 adicionales 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 aparecer 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
Al subir desde 3 y desde 15, el primer nodo al que llegan ambos es 8: 3 es su hijo izquierdo y 15 cuelga debajo de 12, a su derecha. La raíz 20 también es un ancestro común, pero está más arriba.
challenge icon

Para ir más allá

¿Qué cambiarías si p o q pudieran faltar 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í

Prueba #1

Prueba #2

Prueba #3

Argumentos

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

Salida Esperada

8