Menu
CoddyTech

Lowest Common Ancestor of a Binary Tree

Se te proporciona un árbol binario en el arreglo root, en orden de montículo: la raíz está en el índice 0, los hijos del índice i están en 2*i+1 (izquierdo) y 2*i+2 (derecho), y -1 indica una posición vacía. Los valores son distintos y no siguen ningún orden.

Devuelve el valor del ancestro común más bajo de p y q, los valores de dos nodos diferentes: el nodo más profundo cuyo subárbol contiene ambos. Un subárbol incluye su nodo superior, así que, si q está debajo de p, la respuesta es p.

Función

lowestCommonAncestor(root: integer-array, p: integer, q: integer) → integer
rootinteger-array
el árbol binario por niveles, con -1 para indicar una posición vacía
pinteger
el valor de un nodo
qinteger
el valor de otro nodo
Devuelveinteger
el valor del nodo más bajo cuyo subárbol contiene tanto p como q

Restricciones

  • 2 ≤ root.length ≤ 32767
  • Cada root[i] es -1 o un valor con 0 ≤ root[i] ≤ 104.
  • root[0] nunca es -1, y el árbol tiene al menos dos nodos.
  • 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.
  • Todos los valores del árbol son distintos y no siguen ningún orden.
  • p y q son los valores de dos nodos diferentes del árbol, en cualquier orden.

Ejemplos

Entrada
root = [8, 3, 10, 6, 4, 12, 1, -1, -1, 7, 9]p = 6q = 9
Salida
3
Explicación
6 es el hijo izquierdo de 3, y 9 está debajo de 4, a la derecha de 3, así que se encuentran en 3. Comparar los valores señalaría la raíz 8: 6 es menor y 9 es mayor.
challenge icon

Para ir más allá

Si p o q pueden faltar, y la respuesta es -1, ¿qué atajo de la pasada única falla y cómo puedes aun así terminar en un recorrido?

Restablecer código
def lowestCommonAncestor(root, p, q):
    # Escribe el código aquí

Prueba #1

Prueba #2

Prueba #3

Argumentos

root = [8, 3, 10, 6, 4, 12, 1, -1, -1, 7, 9]
p = 6
q = 9

Salida Esperada

3